У меня есть код ниже, который показывает, как очередь всегда будет очищаться даже при добавлении в очередь нескольких потоков. Он использует рекурсию, но некоторое время l oop тоже может сработать. Это плохая практика или будет сценарий, когда в очереди может быть объект, и он не будет извлечен, пока что-то не будет добавлено в очередь.
Основная цель этого состоит в том, чтобы иметь очередь, которая обеспечивает порядок выполнения без необходимости постоянно опрашивать или блокировать с помощью q.get ()
import queue
import threading
lock = threading.RLock()
q = queue.Queue()
def execute():
with lock:
if not q.empty():
text = q.get()
print(text)
execute()
def add_to_queue(text):
q.put(text)
execute()
# Assume multiple threads can call add to queue
add_to_queue("Hello")