Rumah > Soal Jawab > teks badan
Saya menghadapi masalah seperti itu semasa menguji model pengeluar-pengguna Selepas mewarisi benang, saya menambah tanda tanda
class Consumer(threading.Thread):
def __init__(self, queue):
threading.Thread.__init__(self)
self._queue = queue
self.mark = True
def run(self):
while self.mark:
msg = self._queue.get()
if isinstance(msg, str) and msg == 'quit':
break
print("I'm a thread, and I received %s!!" % msg)
print('Bye byes!')
def producer():
q = queue.Queue()
worker = Consumer(q)
worker.start() # 开启消费者线程
start_time = time.time()
while time.time() - start_time < 5:
q.put('something at %s' % time.time())
time.sleep(1)
worker.mark = Flese
worker.join()
Saya pada asalnya menjangkakan untuk menggunakan bendera ini untuk mengawal hujung utas, tetapi kesan sebenar ialah program tersekat dalam worker.join()
dan tidak keluar sama sekali.
Maaf, apakah sebabnya?
伊谢尔伦2017-05-18 11:04:22
class Consumer(threading.Thread):
def __init__(self, queue):
threading.Thread.__init__(self)
self._queue = queue
self.mark = True
def run(self):
while self.mark:
try:
msg = self._queue.get(block=False) # 非阻塞
print("I'm a thread, and I received %s!!" % msg)
except:pass
print('self.mark',self.mark)
print('Bye byes!')
def producer():
q = queue.Queue()
worker = Consumer(q)
worker.start() # 开启消费者线程
start_time = time.time()
while time.time() - start_time < 5:
q.put('something at %s' % time.time())
time.sleep(1)
worker.mark = False
worker.join()