#python-3.x #queue #python-multithreading
#python-3.x #очередь #python-многопоточность
Вопрос:
Я столкнулся с «небольшой» проблемой, связанной с добавлением данных в очередь.Очередь из потока.
Данные среды: Ubuntu 18.04 / Python 3.6.7 / Python 3.8.5
В строках ниже я опубликую свой упрощенный код. Любая помощь будет оценена по достоинству.
from threading import Thread,Lock
from queue import Queue
from random import randint
thread = None
thread_lock = Lock()
q = Queue()
def worker(number):
random_number= [str(randint(1,999)),number]
q.put(random_number)
def first_function(iteration):
global thread
some_list=[]
with thread_lock:
threads=[]
if thread is None:
for iterator in range(iteration):
thread = Thread(target=worker,args=(iterator,))
threads.append(thread)
thread.start()
for thread_ in threads:
thread_.join()
thread = None
while not q.empty():
some_list.append(q.get())
return (some_list)
print(first_function(10))
print(first_function(5))
Мой второй вызов вернет пустой список. Пожалуйста, дайте мне идею.
Ответ №1:
Проблема заключается в том, что «thread = None» после первого выполнения метода в потоке добавляет <Thread … > и во втором вызове, когда вы проверяете «если поток отсутствует», suprize не равен None .