Python-最大进程数的多处理
我希望一次最多创建和运行N个进程。 流程完成后,应立即更换新流程。 以下代码起作用(假设Dostuff是要执行的函数)。 问题是我正在使用一个循环,需要时间.sleep来允许 完成工作的过程。这是相当不够的。 完成这项任务的最佳方法是什么Python-最大进程数的多处理,python,multiprocessing,Python,Multiprocessing,我希望一次最多创建和运行N个进程。 流程完成后,应立即更换新流程。 以下代码起作用(假设Dostuff是要执行的函数)。 问题是我正在使用一个循环,需要时间.sleep来允许 完成工作的过程。这是相当不够的。 完成这项任务的最佳方法是什么 import time,multiprocessing if __name__ == "__main__": Jobs = [] for i in range(10): while len(Jobs) >= 4:
import time,multiprocessing
if __name__ == "__main__":
Jobs = []
for i in range(10):
while len(Jobs) >= 4:
NotDead = []
for Job in Jobs:
if Job.is_alive():
NotDead.append(Job)
Jobs = NotDead
time.sleep(0.05)
NewJob = multiprocessing.Process(target=Dostuff)
Jobs.append(NewJob)
NewJob.start()
经过一点修补,我考虑创建新线程,然后
从以下线程启动我的进程:
import threading,multiprocessing,time
def processf(num):
print("in process:",num)
now=time.clock()
while time.clock()-now < 2:
pass ##..Intensive processing..
def main():
z = [0]
lock = threading.Lock()
def threadf():
while z[0] < 20:
lock.acquire()
work = multiprocessing.Process(target=processf,args=(z[0],))
z[0] = z[0] +1
lock.release()
work.start()
work.join()
activet =[]
for i in range(2):
newt = threading.Thread(target=threadf)
activet.append(newt)
newt.start()
for i in activet:
i.join()
if __name__ == "__main__":
main()
导入线程、多处理、时间
def processf(num):
打印(“正在处理:”,num)
现在=time.clock()
而time.clock()-现在<2:
通过密集加工。。
def main():
z=[0]
lock=threading.lock()
def threadf():
当z[0]<20时:
lock.acquire()
work=multiprocessing.Process(target=processf,args=(z[0],))
z[0]=z[0]+1
lock.release()
开始工作
工作加入
activet=[]
对于范围(2)中的i:
newt=threading.Thread(目标=threadf)
activet.append(newt)
newt.start()
对于activet中的i:
i、 加入
如果名称=“\uuuuu main\uuuuuuuu”:
main()
但是,此解决方案更好(不会减慢已启动的流程),
我不会真的相信我在一个我不知道的领域里写的代码。。
我不得不使用一个列表(z=[0]),因为整数是不可变的。
有没有办法将processf嵌入main()中?我宁愿不需要额外的服务
全局变量。如果我试图简单地复制/粘贴函数,我会得到一个严重的错误(
属性错误无法pickle本地对象“main.(locals).processf')为什么不使用
concurrent.futures.ThreadPoolExecutor
executor=线程池executor(最大工作线程数=20)
res=执行者提交(任何定义)
你看过吗?