Python多处理-最快进程终止时返回
我有一个函数f:Python多处理-最快进程终止时返回,python,map,process,queue,multiprocessing,Python,Map,Process,Queue,Multiprocessing,我有一个函数f: def f(param): return param**2 以及参数p的列表: p = [1, 2092132192, 30912830921, 4102983092183] (在我的实际代码中,f发布到p中指定的URL并返回响应) 我希望对p中的所有项同时调用f,并返回最快的结果,并终止其他三个(或无论有多少个进程仍在运行)进程。我该怎么做呢?使用这种方法:创建一个helper函数,它包装f(),不返回结果,而是将结果放入队列(可能还会返回) 现在启动正常/常规进
def f(param):
return param**2
以及参数p的列表:
p = [1, 2092132192, 30912830921, 4102983092183]
(在我的实际代码中,f发布到p中指定的URL并返回响应)
我希望对p中的所有项同时调用f,并返回最快的结果,并终止其他三个(或无论有多少个进程仍在运行)进程。我该怎么做呢?使用这种方法:创建一个helper函数,它包装
f()
,不返回结果,而是将结果放入队列(可能还会返回)
现在启动正常/常规进程,但不要等待所有线程终止。相反,只需等待一个项目显示在队列中。如果您得到一个线程,您可以终止其他线程并返回。这种事情总是出了名的困难。如果url抓取发布了GIL(可能是其他比我更了解代码的人),那么使用线程可能比使用多处理稍微容易一些。但即使这样,我也不确定我将如何完成它…
Queue.get(True,60)
等待60秒购买一件物品。我仍然不确定如何做到这一点。包装器函数到底将什么放入队列?def wrapper(param):queue.put(f(param))
。我正在使用一个包装器,以防由于某种原因您无法编辑f()
。我早就知道了,不过还是要谢谢您!我这样做是为了杀掉所有其他进程:多进程中的p.active_children():p.terminate()
它是脏的,但现在可以工作了。