我有python代码,它以stream(sys.stdin)的形式读取数据,然后为每一行执行一些操作。 现在随着数据量的增加,我想在线程之间拆分任务并让它们并行工作。
通过文档,他们中的大多数建议线程需要轮询(例如从队列中)以获取任务并在其上工作。在这里,我需要将任务推送到这些线程。
任何想法/链接,我可以弄清楚如何做到这一点?
for line in sys.stdin:
//perform some action, which needs to be split among threads
//action is I/O-bound
一个选项是我从这个流中读取,将它传递给Queue并从那里进行线程轮询。
答案 0 :(得分:3)
使用concurrent.futures(在3.2中的stdlib中,backport available for 2.5+):
from concurrent.futures import ThreadPoolExecutor
import sys
def some_action(line):
pass # TODO: the actual task
with ThreadPoolExecutor() as executor:
for line in sys.stdin:
future = executor.submit(some_action, line)
请注意,如果任务是计算密集型的,那么如果您的Python解释器受MultiprocessingPoolExecutor
限制,则应使用GIL而不是ThreadPoolExecutor
。