国产成人精品亚洲777人妖,欧美日韩精品一区视频,最新亚洲国产,国产乱码精品一区二区亚洲

您的位置:首頁技術文章
文章詳情頁

python 繼承線程的類 不能通過標志位結束線程

瀏覽:105日期:2022-06-30 15:52:11

問題描述

在測試生產消費者模型的時候遇到這樣一個問題,在繼承線程后 加了個標志位 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() # 開啟消費者線程 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()

我原先指望 通過這個標志位來實現線程的結束控制,但實際效果是程序卡死在worker.join()完全沒有退出。

請教下,這是什么原因?

問題解答

回答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() # 開啟消費者線程 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()

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 通辽市| 遂溪县| 佛冈县| 吉首市| 永德县| 科技| 饶阳县| 湖北省| 崇阳县| 宜君县| 德钦县| 青海省| 二手房| 乐业县| 江西省| 密山市| 滦平县| 合山市| 商都县| 虹口区| 远安县| 错那县| 周至县| 信宜市| 安阳市| 扶绥县| 深圳市| 衡阳县| 鹿邑县| 平邑县| 饶平县| 育儿| 蕉岭县| 娱乐| 阿勒泰市| 玉溪市| 武义县| 图们市| 东兴市| 拜泉县| 肥西县|