Python - 最简单的并行运行函数的方法

时间:2016-04-08 11:17:50

标签: python concurrency twisted reactor

我正在努力做一些实际上应该很简单的事情。我有一个函数可以进行一些长时间的计算,简化它就像这样:

import time    
def compute_stuff(number):
   time.sleep(10)
   return [number*2, number*4]

我希望并行运行此函数的两个实例,并将它们的结果收集到一个数组中。我已经阅读了一些有关Twisted reactor的内容,它似乎提供了异步查询,但是在一个线程中运行所有内容,所以当我这样做时:

from twisted.internet import reactor
import time

def compute_stuff(number):
   time.sleep(10)
   return [number*2, number*4]

reactor.callWhenRunning(compute_stuff, 1)
reactor.callWhenRunning(compute_stuff, 4)
reactor.callWhenRunning(compute_stuff, 2)
reactor.run()

在执行下一个调用之前,它等待第一个调用完成。有没有办法让它平行?即使是走路也会扭曲吗?

2 个答案:

答案 0 :(得分:2)

您可以尝试穿线模块

import threading
import time    

def compute_stuff(number):
   print str(number) + "start"
   time.sleep(10)
   print str(number) + "end"
   return [number*2, number*4]


threads = []
for i in range(5):
    t = threading.Thread(target=compute_stuff, args=(i,))
    threads.append(t)
    t.start()

答案 1 :(得分:0)

使用task您可以按以下间隔运行它们:

from twisted.internet import task
from twisted.internet import reactor
import time

def compute_stuff(number):
   time.sleep(10)
   return [number*2, number*4]

t1 = task.callWhenRunning(compute_stuff, 1)
t2 = task.callWhenRunning(compute_stuff, 4)
t3 = task.callWhenRunning(compute_stuff, 2)

t1.start(10) #run every 10 seconds
t2.start(10)
t3.start(10)

reactor.run()

但我不确定线程​​......