如果其中一个线程产生了结果,我可以停止等待线程完成吗



我向不同服务器上大约几百个不同的API端点发出一组GET请求。在其中一个端点中,我想要获取并返回一些信息。

在这些请求中的任何一个向我返回一些东西之后,我想终止其他线程并退出。有些请求几乎是即时的,有些请求可能需要20秒才能完成。

如果我碰巧在2秒内找到了信息,我不想再过20秒就可以继续工作了。

目前我正在做这样的事情:

threads = list()
for s in silos: #here i create all the requests
t = Thread(target=process_request, args=(my, args, here))
t.name = "{} - {}".format(some, name)
threads.append(t)

然后我做:

print("Threads: {}".format(len(threads))) # 100 - 250 of them
[ t.start() for t in threads ]
[ t.join() for t in threads ]

process_request((只是发出get请求,并在status_code==200的情况下将结果存储在dict中。我正在使用请求和线程模块。

如果使用多进程池,则可以在第一个响应到达时立即终止池:

import multiprocessing as mp
import time

pool = None

def make_get_request(inputs):
print('Making get request with inputs ' + str(inputs))
time.sleep(2)
return 'dummy response for inputs ' + str(inputs)

def log_response(response):
print("Got response = " + response)
pool.terminate()
def main():
global pool
pool = mp.Pool()
for i in range(10):
pool.apply_async(make_get_request, args = (i,), callback = log_response)
pool.close()
pool.join()
if __name__ == '__main__':
main()

相关内容

最新更新