在下面的代码中,Function
是一个要调用的函数,我如何指定要用作10的处理器数?
if __name__ == '__main__':
jobs = []
for l in lst:
p = multiprocessing.Process(target=Function, args=(l,))
jobs.append(p)
p.start()
此代码将完全接管我的服务器,那么如何将其限制为十个内核?我应该把它放在一个循环中吗?
答案 0 :(得分:4)
鉴于您实际上是在一个变量列表上映射函数,我建议您使用multiprocessing.Pool
代替。
这是一个创建有限数量工作线程池的类,然后可以使用它来在输入列表上运行函数而不是Process
,在每个函数调用中创建一个线程,然后运行他们都在同一时间
在python版本中使用它的一个例子< 3.3将是:
from multiprocessing import Pool
import contextlib
num_threads = 10
with contextlib.closing( Pool(num_threads) ) as pool:
results = pool.map(Function, lst)
如果你使用python 3而不是Pool
类,默认情况下可以使用上下文管理器,代码简化为:
from multiprocessing import Pool
num_threads = 10
with Pool(num_threads) as pool:
results = pool.map(lst)
答案 1 :(得分:0)
使用流程池分配设定数量的流程来执行您的任务:https://docs.python.org/2/library/multiprocessing.html#using-a-pool-of-workers