gpt4 book ai didi

python - 当我的 multiprocessing.pool.apply_async 次数超过我的处理器时会发生什么

转载 作者:太空狗 更新时间:2023-10-30 00:24:15 26 4
gpt4 key购买 nike

我有以下设置:

results = [f(args) for _ in range(10**3)]

但是,f(args) 需要很长时间来计算。所以我想对其进行多处理。我想这样做:

pool = mp.pool(mp.cpu_count() -1) # mp.cpu_count() -> 8
results = [pool.apply_async(f, args) for _ in range(10**3)]

显然,我的计算机上没有 1000 个处理器,所以我担心:
上述调用会导致 1000 个进程同时竞争 CPU 时间还是 7 个进程同时运行,在上一个调用完成时迭代计算下一个 f(args)

我想我可以做一些像 pool.async_map(f, (args for _ in range(10**3))) 来得到相同的结果,但这篇文章的目的是了解 pool.apply_async

的行为

最佳答案

您运行的进程永远不会超过池中工作人员的数量(在您的情况下为 mp.cpu_count() - 1。如果您调用 apply_async 和所有worker 很忙,一旦有 worker 空闲,任务就会被排队并执行。你可以通过一个简单的测试程序看到这一点:

#!/usr/bin/python

import time
import multiprocessing as mp

def worker(chunk):
print('working')
time.sleep(10)
return

def main():
pool = mp.Pool(2) # Only two workers
for n in range(0, 8):
pool.apply_async(worker, (n,))
print("called it")
pool.close()
pool.join()

if __name__ == '__main__':
main()

输出是这样的:

called it
called it
called it
called it
called it
called it
called it
called it
working
working
<delay>
working
working
<delay>
working
working
<delay>
working
working

关于python - 当我的 multiprocessing.pool.apply_async 次数超过我的处理器时会发生什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23481419/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com