如何在Python中统计当前运行的多进程数量并维持25个进程运行?
保持最多25个并行进程运行的解决方案
我懂你的需求——要让脚本持续维持最多25个load进程在运行,而不是只启动10个就停。当前代码的问题在于它只是固定循环10次启动进程,没有后续的监控和补充逻辑。
这里是修改后的代码,完美实现了你要的持续检查、补充进程的逻辑:
import random, time from selenium import webdriver from selenium.webdriver.common.proxy import * from fake_useragent import UserAgent import multiprocessing def load(): proxy = "falcon.proxyrotator.com:8080" profile = webdriver.ChromeOptions() profile.add_argument('headless') profile.add_argument('--proxy-server=http://%s' % proxy) profile.add_argument('--user-agent=' + UserAgent().random) driver = webdriver.Chrome(chrome_options=profile) try: driver.get('https://ipchicken.com') print ('done') time.sleep(30) finally: driver.quit() # 确保无论是否出错都能关闭浏览器,避免资源泄漏 if __name__ == '__main__': max_processes = 25 running_processes = [] while True: # 先清理已经结束的进程,避免列表里堆积无效的进程对象 running_processes = [p for p in running_processes if p.is_alive()] # 计算需要启动的新进程数量 needed_processes = max_processes - len(running_processes) if needed_processes > 0: print(f"启动 {needed_processes} 个新进程...") for _ in range(needed_processes): p = multiprocessing.Process(target=load) p.start() running_processes.append(p) # 给每个新进程留一点启动间隔,避免瞬间打满系统或代理资源 time.sleep(1) # 每隔几秒检查一次进程状态,不要太频繁占用CPU time.sleep(5)
关键改动说明:
- 进程跟踪列表:用
running_processes保存所有活跃的进程对象,每次循环先过滤掉已结束的进程,确保我们只统计真正在运行的任务。 - 动态补全进程:每次循环计算当前活跃进程数和最大数的差值,自动启动足够的新进程填补空缺,始终维持25个进程的上限。
- 资源保护细节:添加了启动间隔(1秒)和检查间隔(5秒),避免瞬间创建大量进程导致系统或代理服务器压力过载。
- 异常安全处理:把
driver.quit()放到finally块里,确保即使页面加载出错,浏览器也会被正确关闭,不会残留无用的进程。
如果需要停止这个循环,直接按Ctrl+C就行;要是需要自动停止的逻辑,也可以在循环里加个判断条件(比如完成一定任务量、或者到指定时间后退出)。
内容的提问来源于stack exchange,提问作者Dylan Everything
相关产品推荐
相关产品推荐

