消息队列 + 线程实现简单异步
Posted benlam
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了消息队列 + 线程实现简单异步相关的知识,希望对你有一定的参考价值。
通过消息队列 + 线程实现简单异步
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Date : 2020/4/22 9:54
# @File : thread_test.py
# @Author : BenLam
# @Link : https://www.cnblogs.com/BenLam/
# @Version : PyCharm
import random
import queue
import threading
text = queue.Queue()
def msg():
‘‘‘
# 生成消息队列假数据
‘‘‘
li = random.sample(range(100), 18)
li.append("kill")
random.shuffle(li)
print(f"生成消息队列 <- {li} ->")
for message in li:
send("->> " + str(message) )
if message == "kill": break
def send( msg ):
text.put( msg )
def recv_a():
‘‘‘
# 判断消息队列是否为空
‘‘‘
while text.empty() == False:
msg = text.get()
print( "recv_a: ", msg )
def recv_b():
‘‘‘
# 消息队列获取为空抛出异常
‘‘‘
while True:
try:
msg = text.get(False)
print( "recv_b: ", msg )
except queue.Empty:
print("recv_b 消息队列为空")
break
def recv_c():
‘‘‘
# 简单的异步
‘‘‘
while True:
msg = text.get()
print( "recv_c: ", msg )
if __name__ == "__main__":
print("--- 开始 ---")
msg()
a = threading.Thread( target=recv_a )
a.start()
a.join()
msg()
b = threading.Thread( target=recv_b )
b.start()
b.join()
c = threading.Thread( target=recv_c )
c.start()
while True:
message = input("输入队列消息: ")
send( "打印输出消息 -> " + message )
c.join()
"""
打印:
--- 开始 ---
生成消息队列 <- [27, 42, 46, 67, 30, 53, 22, 11, 73, 72, 20, 82, 62, 31, 76, 61, 47, 60, ‘kill‘] ->
recv_a: ->> 27
recv_a: ->> 42
recv_a: ->> 46
recv_a: ->> 67
recv_a: ->> 30
recv_a: ->> 53
recv_a: ->> 22
recv_a: ->> 11
recv_a: ->> 73
recv_a: ->> 72
recv_a: ->> 20
recv_a: ->> 82
recv_a: ->> 62
recv_a: ->> 31
recv_a: ->> 76
recv_a: ->> 61
recv_a: ->> 47
recv_a: ->> 60
recv_a: ->> kill
生成消息队列 <- [23, 5, 31, ‘kill‘, 92, 87, 47, 55, 46, 2, 34, 32, 4, 88, 6, 19, 84, 30, 80] ->
recv_b: ->> 23
recv_b: ->> 5
recv_b: ->> 31
recv_b: ->> kill
recv_b 消息队列为空
输入队列消息: A
recv_c: 打印输出消息 -> A
输入队列消息: B
recv_c: 打印输出消息 -> B
输入队列消息: C
recv_c: 打印输出消息 -> C
输入队列消息: D
recv_c: 打印输出消息 -> D
输入队列消息:
[因为消息队列阻塞原因,可以无限收发队列消息,但不要超过最大值]
"""
以上是关于消息队列 + 线程实现简单异步的主要内容,如果未能解决你的问题,请参考以下文章