在一定数量的核上进行多处理

时间:2015-11-02 15:05:16

标签: python multithreading multiprocessing

在下面的代码中,Function是一个要调用的函数,我如何指定要用作10的处理器数?

  if __name__ == '__main__':
        jobs = []

        for l in lst:
           p = multiprocessing.Process(target=Function, args=(l,))
           jobs.append(p)
           p.start()

此代码将完全接管我的服务器,那么如何将其限制为十个内核?我应该把它放在一个循环中吗?

2 个答案:

答案 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