有一些对象的列表,这些对象具有某种方法f()
。
这是列表中所有对象的调用方法f()
。
for item in items:
item.f()
f()
对所有对象均独立工作。因此可以同时调用多个对象。
如何重写此代码以使用所有内核?
答案 0 :(得分:0)
在cpython中,线程不是并行执行的,因此您必须使用进程或异步。您可以使用multiprocessing.pool
或concurrent.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)