【发布时间】:2016-06-07 12:27:31
【问题描述】:
我从以下问题中接受的答案中获得了以下代码。当我在 Windows 10 x64bit 机器上运行它时,在 Python 3.5.1 中它会启动线程,但其中只有一个显示任何 CPU 使用率,而且很少。发生这种情况时,终端正在从 print 语句向上滚动数字,因此它正在运行......当我运行其他使用循环的 python 脚本时,我看到脚本的 CPU 使用率为 13.5%。我希望看到这会启动 4 个线程,每个线程具有 13.5% 的 CPU 使用率。 我正在通过 Windows 命令提示符运行脚本,而这些是唯一运行的 5 个 python 进程。当我通过按 Ctrl+C 存在脚本时,所有进程都会停止。
为什么这没有按预期工作?
问题: How do I "multi-process" the itertools product module?
来自已接受答案的代码:
#!/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()
感谢您的宝贵时间。
【问题讨论】:
标签: python multithreading python-3.x