from multiprocessing import Process
def f(name):
print 'hello', name
if __name__ == '__main__':
for i in range(0, MAX_PROCESSES):
p = Process(target=f, args=(i,))
p.start()
运行良好.但是,MAX_PROCESSES是可变的,可以是介于1和512之间的任何值.因为我只在具有8个内核的机器上运行此代码,所以我需要找出是否可以限制允许在其中运行的进程数.同时.我已经研究过multiprocessing.Queue,但它看起来不像我需要的 – 或者我可能错误地解释了文档.
有没有办法限制同时多处理的数量.进程运行?
解决方法:
使用multiprocessing.Pool可能是最明智的.Pool根据系统上可用的最大内核数量生成一个工作进程池,然后在内核可用时基本上提供任务.
from multiprocessing import Pool
def f(x):
return x*x
if __name__ == '__main__':
pool = Pool(processes=4) # start 4 worker processes
result = pool.apply_async(f, [10]) # evaluate "f(10)" asynchronously
print result.get(timeout=1) # prints "100" unless your computer is *very* slow
print pool.map(f, range(10)) # prints "[0, 1, 4,..., 81]"
并且,如果您的代码需要,还可以使用multiprocessing.cpu_count()方法来计算给定系统上的核心数量,这也很方便.
编辑:这是一些似乎适用于您的特定情况的草稿代码:
import multiprocessing
def f(name):
print 'hello', name
if __name__ == '__main__':
pool = multiprocessing.Pool() #use all available cores, otherwise specify the number you want as an argument
for i in xrange(0, 512):
pool.apply_async(f, args=(i,))
pool.close()
pool.join()
标签:python,multithreading,multiprocessing
来源: https://codeday.me/bug/20190930/1834486.html