zeromq 和 python:没有睡眠命令不发送

Posted

技术标签:

【中文标题】zeromq 和 python:没有睡眠命令不发送【英文标题】:zero mq and python : not sending without sleep command 【发布时间】:2021-08-04 02:45:36 【问题描述】:

如果我在循环中发送一个没有休眠的命令,zeromq 将不会发送数据。但是,如果循环中的睡眠时间非常短,例如 time.sleep(0.1),它会很好地发送数据。为什么?

这个版本的代码有效:

zero_mq_pub.py

import signal
import time
import zmq
import random

signal.signal(signal.SIGINT, signal.SIG_DFL)

context = zmq.Context()
socket = context.socket(zmq.PUB)
socket.bind('tcp://*:5555')
float_no = str(random.uniform(20,60)).encode()

for i in range(100):
    float_no = str(random.uniform(20,60)).encode()
    socket.send(float_no)
    time.sleep(0.1)

zero_mq_pub.py(不起作用)

import signal
import time
import zmq
import random

signal.signal(signal.SIGINT, signal.SIG_DFL)

context = zmq.Context()
socket = context.socket(zmq.PUB)
socket.bind('tcp://*:5555')
float_no = str(random.uniform(20,60)).encode()

for i in range(100):
    float_no = str(random.uniform(20,60)).encode()
    socket.send(float_no)

zero_mq_receiver

import signal
import zmq


signal.signal(signal.SIGINT, signal.SIG_DFL)

context = zmq.Context()

socket = context.socket(zmq.SUB)
socket.connect('tcp://localhost:5555')
socket.setsockopt(zmq.SUBSCRIBE, b'')

while True:
    message = socket.recv_string()
    float_message = float(message)
    print("type is: ", type(float_message), "    the message is ", float_message )

【问题讨论】:

你应该知道0.1000000000000000000000000000000000000000000000000000000000000.1是一模一样的。 【参考方案1】:

我发现 pyzmq 官方的例子也是休眠 0.1 秒

来源:https://github.com/zeromq/pyzmq/blob/main/examples/pubsub/topics_pub.py#L61

这个例子(topics_pub 和 topic_sub 在同一个存储库文件夹中)适用于一些字节的更改字符串。

【讨论】:

以上是关于zeromq 和 python:没有睡眠命令不发送的主要内容,如果未能解决你的问题,请参考以下文章

Python GUI 未捕获 zeromq 消息

ZeroMQ 非阻塞非队列推送

如何使用 ZeroMQ 从 C# 客户端向 C++ 服务器发送消息

nc访问的ZeroMQ IPC Unix Domain Socket

Metatrader 5绑定ZeroMQ / Python

是否可以向 ZeroMQ 添加事件处理以在接收/发送数据时采取行动?