当我有需要进行大量搜索的脚本时,我通常在threading
. 由于我的主程序是负责搜索的,所以这个主程序也应该负责将结果提供给用户,而不是线程。
举个例子,假设我有一个脚本,它负责知道一个数字是否在 1 到 10 亿之间。每个线程都在执行比较并可能找到结果。
我的示例脚本如下所示:
import threading
def busqueda1(num):
for i in range(500000000):
if(num == i):
print("Busqueda1 confirmó el número")
def busqueda2(num):
for i in range(500000001,1000000000):
if(num == i):
print("Busqueda2 confirmó el número")
numero = 123456789
thread1 = threading.Thread(target=busqueda1,args=(numero,))
thread2 = threading.Thread(target=busqueda2,args=(numero,))
thread1.start()
thread2.start()
我需要在我的主程序中知道两个线程中哪一个找到了该数字并将其显示给用户。
由于它们是不同的执行线程,我如何使主程序和其他线程能够访问正在生成的可能结果?
从官方 python 3.6 文档中,我们知道该对象
Queue
:所以这个问题的答案是使用一个对象
Queue
在线程之间交换信息。简而言之,Queue
它是一个模拟队列的对象。实例化时,默认初始化为“先进先出”,这表明我们放入队列的第一个对象将是我们尝试从中取出某些东西时得到的第一个对象。代码看起来像这样:
因此,线程不是打印到屏幕上,而是将它们获得的输出排队,主程序可以访问这个队列并从那里获取信息并打印它。
这个答案和问题的灵感来自英文网站的这个问题。