2016-04-08 50 views
0

我正在努力做一些实际上应该很简单的事情。我有做一些很长的计算功能,简化它loks这样的:Python - 可以并行运行函数的最简单方法

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

我想并行运行这个函数的两个实例,并收集他们的结果在一个阵列中。我读过一些关于扭曲的反应器,它似乎提供异步查询,但运行在一个线程中的一切,所以当我做例如:

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

您可以尝试线程模块

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() 
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() 

但我不知道线程...

相关问题