Python - 运行 并行运行的最简单方法
Python - simplest way possible to run functions in parallel
我正在努力做一些实际上应该很简单的事情。我有一个函数可以做一些长时间的计算,为了简化它,就像这样:
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()
在执行下一个调用之前等待第一个调用完成。有没有办法让它平行? Twisted 是否可行?
使用 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 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()
在执行下一个调用之前等待第一个调用完成。有没有办法让它平行? Twisted 是否可行?
使用 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()