赞
踩
完整代码如下:
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.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。