Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python—并行运行函数的最简单方法_Python_Concurrency_Twisted_Reactor - Fatal编程技术网

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

Python—并行运行函数的最简单方法,python,concurrency,twisted,reactor,Python,Concurrency,Twisted,Reactor,我正在努力做一些实际上应该很简单的事情。我有一个函数,它可以做一些长时间的计算,简化如下: import time def compute_stuff(number): time.sleep(10) return [number*2, number*4] 我想并行运行这个函数的两个实例,并将它们的结果收集到一个数组中。我读过一些关于Twisted reactor的文章,它似乎提供了异步查询,但它在一个线程中运行所有内容,所以当我这样做时,例如: from twisted.i

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

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

它等待第一个调用完成,然后再执行下一个调用。有没有办法使之平行?甚至在前进的路上都会扭曲吗?

使用
任务
可以按如下间隔运行它们:

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

但是我不确定线程…

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

但是我不确定线程…

您可以尝试线程模块

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

您可以尝试线程模块

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