当前位置:   article > 正文

python multiprocessing.Queue()队列及子线程问题

python multiprocessing.Queue()队列及子线程问题

完整代码如下:

import time
import random
import threading
import multiprocessing

class Qtest:
    def __init__(self, message_queue):
        self.message_queue = message_queue

    def work2(self):
        self.message_queue.put(11111)  #测试语句
        self.calc_thread()

    def calc_thread(self):
        thread = threading.Thread(target=self.calc)
        thread.start()

    def calc(self):
        while True:
            data = random.random()
            self.message_queue.put(data)
            time.sleep(0.5)

class Check:
    def __init__(self, message_queue):
        self.message_queue = message_queue

    def check(self):
        while True:
            try:
                get_data = self.message_queue.get_nowait()
                print("check fun get data=", get_data)
            except Exception as e :
                print("Queue is empty at this moment.",e)
            finally:
                time.sleep(0.5)


if __name__ == '__main__':
    message_queue = multiprocessing.Queue()  # 创建队列
    qtest = Qtest(message_queue)  # 传递给Qtest
    check = Check(message_queue)  # 传递给Check
    # 启动Qtest的进程

    qtest_proc = multiprocessing.Process(target=qtest.work2)
    qtest_proc.start()

    # 启动Check的进程
    check_proc = multiprocessing.Process(target=check.check)
    check_proc.start()
    
    # 等待进程结束
    qtest_proc.join()
    check_proc.join()

运行过程中,如果注释掉Qtest类中work2函数的 self.message_queue.put(11111)  #测试语句,则代码运行正常,一直能取到值,运行结果如下:

check fun get data= 0.5148598477070766
Queue is empty at this moment. 
check fun get data= 0.3204602976555144
check fun get data= 0.6276052010113149
check fun get data= 0.8192616958851245
check fun get data= 0.7051682249695018
check fun get data= 0.5789854723585576
check fun get data= 0.4697419790235503

运行过程中,如果不注释掉Qtest类中work2函数的 self.message_queue.put(11111)  #测试语句,则代码运行不正常,只能取到两个值,后续一直取不到值,运行结果如下:

Queue is empty at this moment. 
check fun get data= 11111
check fun get data= 0.7240585420813632
Queue is empty at this moment. 
Queue is empty at this moment. 
Queue is empty at this moment. 
Queue is empty at this moment. 
Queue is empty at this moment. 
Queue is empty at this moment. 
Queue is empty at this moment. 
    

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号