将递归程序转换为仅基于循环

Converting a Recursive program to loop based only

我如何修改代码(不使用递归调用),以便只要队列大小不超过 100,000 个项目,它就只添加到队列中。 否则它会等待 5 秒来处理队列项目,(项目一旦被处理就会从队列中删除)然后如果队列中有 space 则再次开始添加项目。否则再等 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()

您可以通过反转队列大小检查并休眠直到队列 space 被释放来执行此操作,例如

for url in url_input_file:
    while len(q) >= 100000:
        time.sleep(5)
    q.put(url)