Я пытаюсь получить рабочий поток python с очередью. Но когда я ставлю любое значение в очередь, я не могу найти это значение в другом потоке.Python Thread with Queue
from Queue import Queue
from threading import Thread
import time
class ThreadWorker(object):
verbose = True
thread = None
queue = Queue()
def __init__(self, workerId, queueMaxSize = 50, emptyQueuewaitTime = 1):
self.queue.maxsize = queueMaxSize
self.thread = Thread(target=self.__work, args=(workerId, emptyQueuewaitTime))
self.thread.setDaemon(True)
self.thread.start()
def __work(self, workerId, sl):
while(True):
if self.queue.empty:
print '[THREAD_WORKER] id: {}, EMPTY QUEUE sleeping: {}'.format(workerId, sl)
time.sleep(sl)
continue
if self.verbose:
print '[THREAD_WORKER] id: {}, queueSize: {}'.format(workerId, self.queue.qsize())
d = self.queue.get()
self.queue.task_done()
def put(self, item, waitIfFull = True):
self.queue.put(item, waitIfFull)
if self.verbose:
print "Add to queue, current queue size: {}".format(self.queue.qsize())
Создание экземпляра и заполнить очереди ...
t = ThreadWorker("t1")
t.put("item1")
t.put("item2")
t.put("item3")
Выход из ниток с именем t1 является: [THREAD_WORKER] ID: t1, EMPTY ОЧЕРЕДЬ спящая: 1
Но в очереди являются тремя объектами ....
'queue.empty' - метод; вам нужно позвонить ему. Кроме того, проверка того, является ли очередь пустой, как правило, очень подвержена ошибкам для взаимодействия с ней; просто вызов 'get' менее склонен к условиям гонки. – user2357112
@ user2357112 Пожалуйста, разместите это как ответ вместо комментария. – ppperry
Также вы, вероятно, не хотите создавать атрибуты класса очереди и потока. –