[英]Using Multiprocessing with Python Flask 2.7 hangs the main app until process completes
[英]How to request a new task when a process completes using the Python multiprocessing library?
基本上,我希望有一个线程池来在给定的时间内执行某些任务。 我认为Python中的多处理库对我来说是完美的。 但是,我无法找出一种方法,对于某个进程何时完成(并且不等待池中的其他线程完成),返回主线程并执行某些任务(递增变量,请检查时间)已达到阈值等),以可能使用新参数启动新过程。 例如,在这里,该函数的所有参数都预先给定了要处理的进程池(4)的参数(1..10):
from multiprocessing import Pool
def f(x):
return x*x
if __name__ == '__main__':
pool = Pool(processes=4) # start 4 worker processes
print pool.map(f, range(10)) # prints "[0, 1, 4,..., 81]"
但是,由于我需要在特定时间段内执行某些任务,因此这对我没有帮助,因为我不一定知道这些任务将花费多长时间。 有什么办法吗?
解决方案之一是使用共享队列。 例如:
from multiprocessing import Process, Queue
import time
def job(queue):
while True:
task = queue.get()
print task*task
if __name__ == '__main__':
# create shared queue
q = Queue()
# create processes
processes = []
for i in range(5):
p = Process(target=job, args=(q,))
p.start()
processes.append(p)
# generate data
for i in range(5):
for j in range(10):
q.put(10*i+j)
time.sleep(0.5)
# join
for p in processes:
p.join()
我添加了time.sleep
以显示稍后添加数据时的工作方式(进程等待,直到共享队列中有可用的东西为止)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.