在运行时同步python线程

时间:2013-08-30 14:32:54

标签: python multithreading

我有一个python脚本,它会产生800,000个http请求,以确保它们回馈200个。如果404在变量中捕获url路径。 url参数化为800,000个不同的ID。我使用100个不同的线程来节省时间,最后我将它们全部加入以获得404'ed等的网址数量,

但是它需要大约2个小时才能完成并且必须等待才能得到结果。 我应该能够在运行期间的任何时候知道到目前为止已经完成了多少个ID,有多少404个等等, 我怎么能这样做?

runners = []
nthreads=100

chunk_size = ceil(len(ids)/float(nthreads))
for i in range(nthreads):
    runners.append(HeadendChecker(i*chunk_size, min(len(dac_ids), chunk_size*(i+1))))

for thread in runners:
    thread.start()

list_of_bad_ids = []
for thread in runners:
    thread.join()
    if thread.get_bad_ids() != None:
        list_of_bad_ids = list_of_bad_ids + thread.get_bad_ids()

1 个答案:

答案 0 :(得分:1)

您可以使用Queue/queue对象,而不是存储200和404的每个线程。

您可以将现有线程转换为生产者:它们生成(status,url id)元组,这些元组放在共享队列中。

然后,您可以添加一个分析器线程,它消耗此队列中的项目,沿途打印状态消息,并以便捷的方式存储结果以进行进一步处理(使用"进一步处理"我的意思是任何在所有工作线程完成后完成处理)