python用ZMQ的REP接收多个REQ的信号
时间: 2023-05-31 10:05:02 浏览: 73
在Python中使用ZMQ的REP接收多个REQ的信号需要借助多线程和队列的方式来实现。具体步骤如下:
1. 导入ZMQ和线程库:
```python
import zmq
import threading
```
2. 创建一个队列来存储接收到的消息:
```python
message_queue = []
```
3. 定义一个函数来处理接收到的消息,并将结果存储到队列中:
```python
def process_message(message):
# 处理接收到的消息
result = ...
# 将结果存储到队列中
message_queue.append(result)
```
4. 定义一个线程函数用于接收REQ发送的消息:
```python
def receive_messages():
context = zmq.Context()
socket = context.socket(zmq.REP)
socket.bind("tcp://*:5555")
while True:
message = socket.recv()
process_message(message)
socket.send(b"OK")
```
5. 创建一个线程来运行接收消息的函数:
```python
t = threading.Thread(target=receive_messages)
t.daemon = True
t.start()
```
6. 在主线程中循环读取队列中的结果,进行后续处理:
```python
while True:
if len(message_queue) > 0:
result = message_queue.pop(0)
# 进行后续处理
```
7. 完整代码如下:
```python
import zmq
import threading
message_queue = []
def process_message(message):
# 处理接收到的消息
result = ...
# 将结果存储到队列中
message_queue.append(result)
def receive_messages():
context = zmq.Context()
socket = context.socket(zmq.REP)
socket.bind("tcp://*:5555")
while True:
message = socket.recv()
process_message(message)
socket.send(b"OK")
t = threading.Thread(target=receive_messages)
t.daemon = True
t.start()
while True:
if len(message_queue) > 0:
result = message_queue.pop(0)
# 进行后续处理
```