我如何多线程3个不同的函数返回相同的值并选择最快的



我使用的是线程模块,有3个不同的函数,它们返回相同的值,但使用不同的方法返回该值。

我想要和ID,并将其称为my_ID

例如:

功能#1:使用移动端点抓取网站,并解析my_id 的json

函数#2:使用桌面端点抓取网站,并为my_id 解析json

功能#3:抓取桌面网站HTML并查找my_id

我想做的是同时运行每个函数,无论哪个函数返回my_id最快,我都会接受它并继续我的代码。

对此,最好的方法是什么?

您可以使用concurrent.futures.

创建三个线程并使用concurrent.futures.Executor.submit()启动它们这将为您返回每个线程的未来对象。

然后你可以

concurrent.futures.wait(fs, timeout=None, return_when=FIRST_COMPLETED)

这将阻塞主线程直到3个子线程中的一个子线程完成。

然后你可以继续使用你的结果。

concurrent.futures.wait Returns a named 2-tuple of sets. The first set, named done and not_done

您可以使用result((方法从已完成的期货对象中获得结果,也可以使用executor.shutdown((安全地关闭执行程序

您可以将对象添加到列表中,然后按如下方式启动它们: futures = [] for task in task_list: futures.append(executor.submit(task.run)) concurrent.futures.wait(futures,timeout=None,return_when=FIRST_COMPLETED)

最新更新