繁体   English   中英

Python多重处理启动进程,但只有一个处于活动状态

[英]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会停止所有进程。

为什么这不能按预期工作?

在此处输入图片说明

问题: 如何“多重处理” itertools产品模块?

来自接受答案的代码:

#!/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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM