如何修改代码(不使用递归调用),以便只要队列大小不超过100,000个项目,它就会添加到队列中。 否则,它会等待5秒钟来处理队列项目(处理后将从队列中删除项目),然后如果队列中有空间则再次开始添加项目。否则等待另外5秒(依此类推)。评论中的部分"#"是我建议的功能。我不介意递归解决方案,只要它是一个递归的尾调用优化方法,所以我没有遇到递归深度限制问题。
url_input_file = array of strings
def worker():
while threading.active_count() > 0:
url = q.get()
sendRequest(url)
q.task_done()
q = Queue()
for threads in range(1000):
t = threading.Thread(target = worker)
t.daemon = True
t.start()
for url in url_input_file:
#if len(q) < 100000:
q.put(url)
#else:
#time.sleep(5)
#try to send it in the queue again
q.join()
答案 0 :(得分:1)
您可以通过反转队列大小检查并休眠直到队列空间被释放来完成此操作,例如
for url in url_input_file:
while len(q) >= 100000:
time.sleep(5)
q.put(url)