python - Python 多个进程消耗/迭代单个生成器(分而治之)
问题描述
我有一个 python 生成器,它返回很多项目,例如:
import itertools
def generate_random_strings():
chars = "ABCDEFGH"
for item in itertools.product(chars, repeat=10):
yield "".join(item)
然后我对此进行迭代并执行各种任务,问题是我只为此使用一个线程/进程:
my_strings = generate_random_strings()
for string in my_strings:
# do something with string...
print(string)
这很好用,我得到了所有的字符串,但是速度很慢。我想利用 Python 多处理的力量来“分而治之”这个 for 循环。但是,当然,我希望每个字符串只处理一次。虽然我找到了很多关于多处理的文档,但我正在尝试用最少的代码找到最简单的解决方案。我假设每个线程每次都应该获取一大块项目并在返回并获得另一个大块之前处理它们......
非常感谢,
解决方案
代码最少的最简单的解决方案?多处理上下文管理器。
我假设您可以将“用字符串做某事”放入一个名为“do_something”的函数中
from multiprocessing import Pool as ProcessPool
number_of_processes = 4
with ProcessPool(number_of_processes) as pool:
pool.map(do_something, my_strings)
如果您想再次获得“do_something”的结果,很简单!
with ProcessPool(number_of_processes) as pool:
results = pool.map(do_something, my_strings)
你会在一个列表中找到它们。
Multiprocessing.dummy 是进程池的语法包装器,可让您使用多处理语法。如果您想要线程而不是进程,只需执行以下操作:
from multiprocessing.dummy import Pool as ThreadPool
推荐阅读
- postgresql - 在插入分区表 postgres 期间锁定
- java - 在 RCP 中打开视图时如何刷新视图?
- ios - 如何在 UiTableView 中的 Xcode 上显示 Firebase 实时数据库的时间戳
- xcode - Xcode|LLDB:线程跳转 -b 1 在闭包内
- jsonschema - json-schema - 允许在所需属性中进行逻辑或
- javascript - mongodb - 展开嵌套子文档
- javascript - javascript: 'return' 被忽略并不断循环
- swift - 如何快速将几张图像作为一张图像保存到照片库?
- windows - DOS命令从文件名中删除空格
- python - Django 项目的 Cron 作业未激活