运行时同步python线程

运行时同步python线程,python,multithreading,Python,Multithreading,我有一个python脚本,它可以生成800000个http请求,以确保它们返回200个请求。如果404在变量中被捕获,则url路径。url被参数化,以获取800000个不同的ID。我正在使用100个不同的线程来节省时间,最后我将它们全部加入,以获得404'ed等URL的数量 但完成这项工作大约需要2个小时,而且还需要等待结果。 我应该能够在运行时的任何时候知道到目前为止已经完成了多少个ID,有多少404'ed等等。, 我该怎么做 runners = [] nthreads=100 chunk_

我有一个python脚本,它可以生成800000个http请求,以确保它们返回200个请求。如果404在变量中被捕获,则url路径。url被参数化,以获取800000个不同的ID。我正在使用100个不同的线程来节省时间,最后我将它们全部加入,以获得404'ed等URL的数量

但完成这项工作大约需要2个小时,而且还需要等待结果。 我应该能够在运行时的任何时候知道到目前为止已经完成了多少个ID,有多少404'ed等等。, 我该怎么做

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()

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

您可以将现有线程转换为生产者:它们生成(状态、url id)元组,并将其放入共享队列中


然后,您可以添加Analyzer线程,该线程使用此队列中的项目,同时打印状态消息,并以方便的方式存储结果以供进一步处理(使用“进一步处理”,我指的是在所有工作线程完成后完成的任何处理)

您不能打印到线程内的控制台吗?如果没有,您应该有一个共享变量(可能列出\u个坏的\u ID),当然,从线程访问它时要特别小心。虽然不是python大师,但其他人会指出正确的路径:)您可能可以使用互斥锁和计时器来定期显示信息。这个问题让我想,有多少线程太多了?谢谢,让我试试互斥的想法。感谢georgeslAnything超过100个线程得到crankyThanks m01,这似乎是个好主意。让我试试这个