【发布时间】:2019-08-06 15:27:05
【问题描述】:
我有一个返回大量项目的 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 循环。但是,当然,我希望每个字符串只处理一次。虽然我找到了很多关于多处理的文档,但我正在尝试用最少的代码找到最简单的解决方案。 我假设每个线程每次都应该获取一大块项目并在返回并获取另一个大块之前处理它们......
非常感谢,
【问题讨论】:
-
关于速度的旁注:它不会有很大的不同,但是如果你将
for item in itertools.product(chars, repeat=10): yield "".join(item)更改为yield from map( "".join, itertools.product(chars, repeat=10)),它会产生更快的结果(通过将所有工作推到 C 层,消除字节码解释器开销,并确保在请求下一个之前释放product的tuples,这允许它重用tuple而不是分配新的)。 -
感谢您的提示!
标签: python python-3.x multiprocessing generator python-multiprocessing