![](/img/trans.png)
[英]Python Multiprocessing - how to make processes wait while active?
[英]Python multiprocessing starts processes, but only one is active
我从以下问题的可接受答案中得到以下代码。 当我在Windows 10 x64位计算机上运行它时,在Python 3.5.1中,它启动了线程,但是其中只有一个显示任何CPU使用情况,而在那方面却很少。 发生这种情况时,终端会在print语句中向上滚动数字,因此它正在运行...当我运行其他使用循环的python脚本时,该脚本的CPU使用率为13.5%。 我希望看到这会增加4个线程,每个线程占用13.5%的CPU使用率。 我正在通过Windows命令提示符运行脚本,而这些是仅5个正在运行的python进程。 当我存在脚本时,按Ctrl + C会停止所有进程。
为什么这不能按预期工作?
来自接受答案的代码:
#!/usr/bin/env python3.5
import sys, itertools, multiprocessing, functools
alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ12234567890!@#$%^&*?,()-=+[]/;"
num_parts = 4
part_size = len(alphabet) // num_parts
def do_job(first_bits):
for x in itertools.product(first_bits, alphabet, alphabet, alphabet):
print(x)
if __name__ == '__main__':
pool = multiprocessing.Pool(processes=4)
results = []
for i in range(num_parts):
if i == num_parts - 1:
first_bit = alphabet[part_size * i :]
else:
first_bit = alphabet[part_size * i : part_size * (i+1)]
results.append(pool.apply_async(do_job(first_bit)))
pool.close()
pool.join()
谢谢你的时间。
您这里没有异步运行任何东西; 您可以在传递给异步工作程序之前调用函数。 您应该传递可调用对象,而不是结果:
pool.apply_async(do_job, (first_bit,))
还要注意, apply_async
的返回值是一个AsyncResult实例:当您要在worker中计算内容时,您需要在这些值上调用get()
-在所有过程完成之后再次-实际获取结果。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.