python - 如何设置多处理中的最大并发工作数?

标签 python multiprocessing

假设我们从 vartec 的 answer 开始它展示了如何使用多处理 worker :

import multiprocessing

def worker(procnum, return_dict):
    '''worker function'''
    print str(procnum) + ' represent!'
    return_dict[procnum] = procnum


if __name__ == '__main__':
    manager = multiprocessing.Manager()
    return_dict = manager.dict()
    jobs = []
    for i in range(5):
        p = multiprocessing.Process(target=worker, args=(i,return_dict))
        jobs.append(p)
        p.start()

    for proc in jobs:
        proc.join()
    print return_dict.values()

我想做同样的事情,只是将并发进程数限制为X。我如何使用worker来做到这一点?

使用 pool/map 并不是真正的最佳选择,因为我有一个像这样的 for 循环:

for item in items:
    result = heavy_lifting_which_cannot_be_parallelized(item)
    process_result_in_a_way_that_can_be_parallelized(result)

因此,我想启动 process_result_in_a_way_that_can_be_parallelized 并继续我的 for 循环。不要等到 for 循环结束后再进行多进程 - 这会更耗时。

最佳答案

您不必使用mapPool 。您可以使用apply_async按照您自己的时间表向池中提交作业。

pool = multiprocessing.Pool(processes=3)
for i in range(30):
    pool.apply_async(worker, (i, return_dict))
pool.close()
pool.join()
print return_dict.values()

关于python - 如何设置多处理中的最大并发工作数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50288029/

相关文章:

python - 删除导入的 python 模块

python - Tobii 眼球追踪器

python - Pathos 处理池递归限制

python - Polars Python 基于 dtype pl.list 选择

python - 如何在 Mac OS X 10.7 的 virtualenv 中安装 PyAudio

python - `@pyqtSlot()` 对嵌套函数有同样的影响吗?

python - 如何在 Python 中对多处理中的 "AttributeError: __exit__"进行故障排除?

python - 如何在python中将文件描述符从父级传递给子级?

python - 使用 joblib 会使程序运行得更慢,为什么?

python - 如何使用带有 *args 的映射在 python 函数调用中解包元组