0

If I send a command without a sleep in the loop, zeromq will not send the data. However, if a really really short duration sleep in the loop, for example time.sleep(000000000000000000000000000000000000000000000000000000000000.1), it sends the data fine. Why?

This version of the code works :

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(000000000000000000000000000000000000000000000000000000000000.1)

zero_mq_pub.py (doesnt work )

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 )
Anonymous Asked question May 14, 2021