如何使用所有内核为列表中的所有对象调用方法?

时间:2019-03-20 08:05:38

标签: python multithreading loops

有一些对象的列表,这些对象具有某种方法f()
这是列表中所有对象的调用方法f()

for item in items:
    item.f()

f()对所有对象均独立工作。因此可以同时调用多个对象。
如何重写此代码以使用所有内核?

1 个答案:

答案 0 :(得分:0)

在cpython中,线程不是并行执行的,因此您必须使用进程或异步。您可以使用multiprocessing.poolconcurrent.futures.ProcessPoolExecutor库,然后使用map函数对所有对象执行该函数。请注意,如果将max_workers设置为等于或高于其他程序可能会滞后的CPU内核数。

from concurrent.futures import ProcessPoolExecutor
with ProcessPoolExecutor(max_workers) as executor:
    result =  executor.map(lambda x: x.f(), items)