Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.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_Map_Process_Queue_Multiprocessing - Fatal编程技术网

Python多处理-最快进程终止时返回

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(),不返回结果,而是将结果放入队列(可能还会返回) 现在启动正常/常规进

我有一个函数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()
它是脏的,但现在可以工作了。