python 繼承線程的類 不能通過(guò)標(biāo)志位結(jié)束線程
問(wèn)題描述
在測(cè)試生產(chǎn)消費(fèi)者模型的時(shí)候遇到這樣一個(gè)問(wèn)題,在繼承線程后 加了個(gè)標(biāo)志位 mark
class Consumer(threading.Thread): def __init__(self, queue):threading.Thread.__init__(self)self._queue = queueself.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() # 開(kāi)啟消費(fèi)者線程 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()
我原先指望 通過(guò)這個(gè)標(biāo)志位來(lái)實(shí)現(xiàn)線程的結(jié)束控制,但實(shí)際效果是程序卡死在worker.join()完全沒(méi)有退出。
請(qǐng)教下,這是什么原因?
問(wèn)題解答
回答1:class Consumer(threading.Thread): def __init__(self, queue):threading.Thread.__init__(self)self._queue = queueself.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() # 開(kāi)啟消費(fèi)者線程 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()
相關(guān)文章:
1. boot2docker無(wú)法啟動(dòng)2. 關(guān)docker hub上有些鏡像的tag被標(biāo)記““This image has vulnerabilities””3. docker-compose中volumes的問(wèn)題4. javascript - mock.js可以存儲(chǔ)數(shù)據(jù)嗎5. nignx - docker內(nèi)nginx 80端口被占用6. docker安裝后出現(xiàn)Cannot connect to the Docker daemon.7. java - SSH框架中寫(xiě)分頁(yè)時(shí)service層中不能注入分頁(yè)類8. golang - 用IDE看docker源碼時(shí)的小問(wèn)題9. docker api 開(kāi)發(fā)的端口怎么獲取?10. dockerfile - 為什么docker容器啟動(dòng)不了?

網(wǎng)公網(wǎng)安備