from time import sleep
from threading import Thread
from threading import get_ident
from queue import *
_urls = Queue()
class URLParser(Thread):
def run(self):
global _urls
while _urls.qsize() > 0:
url = archive_urls.get()
_urls.task_done()
# .... Omitted some code here where I do some work on the url, for brevity
print(str(get_ident()) + ' consumed:' + url + ' qsize:' + str(_urls.qsize()))
sleep(0.002)
我的线程应该休眠多久,以便其他线程可以从队列中消耗?我不想指定一个太大的数字,因为那时我可能会浪费时间,或者太小而错过了所有消费线程的好处......
答案 0 :(得分:4)
不必在你的工作线程中睡觉。有时在示例中已经完成了可视化多线程程序的流程,但是你没有理由在生产代码中这样做。
当一个线程完成任务时,它也可以立即接受下一个任务。它不会让你的程序更快,而另一个线程则代之以完成任务。你唯一能做的就是工作线程时不时地闲着。