在python中的线程之间拆分任务

时间:2014-04-29 11:19:19

标签: python multithreading

我有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并从那里进行线程轮询。

1 个答案:

答案 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

相关问题