【发布时间】:2021-11-24 06:08:41
【问题描述】:
我希望我的 python 文件等待所有线程关闭。 我正在使用下一个代码:
threadslist=int(threading.active_count())
while threadslist>1:
threadslist=int(threading.active_count())
print(Fore.BLUE+"Scan of ports Ended in:"+Style.RESET_ALL, Fore.GREEN+str(round(time.time()-start_time))+Style.RESET_ALL, "s")
使用该代码,我得到:
Scan of ports finished in 128 s
但是当我将print(threadslist) 放入while 循环时,它会加快速度。
第二个代码:
threadslist=int(threading.active_count())
while threadslist>1:
threadslist=int(threading.active_count())
print(threadslist)
print(Fore.BLUE+"Scan of ports Ended in:"+Style.RESET_ALL, Fore.GREEN+str(round(time.time()-start_time))+Style.RESET_ALL, "s")
现在我得到:
Scan of ports Ended in 26 s
为什么在没有打印的情况下完成循环需要更长的时间,而不是使用它?
当我不检查线程是否结束时,我有 20 秒的时间,python 等待的时间超过 6 秒,所以第二次是正常的。
【问题讨论】:
-
为什么不只是
join()循环中的所有线程?像这样的连续轮询效率低下。 -
你可以试试
print(...),而不是time.sleep(0.1)。这可能会进一步改善运行时间。最终正如已经指出的那样,.join()是要走的路。 -
.join 需要很长时间,因为我已经生成了 65k 个线程。我可能是错的,但你认为会发生的事情
-
好吧,您似乎已经设置了某种性能检查。也许您现在可以先尝试
time.sleep(0.1),然后依次循环到.join()每个线程。
标签: python python-3.x multithreading while-loop python-multithreading