gpt4 book ai didi

python - 多线程和 ZMQ DEALER/REP hello world 不起作用

转载 作者:行者123 更新时间:2023-11-30 23:40:06 24 4
gpt4 key购买 nike

首先是我的代码(很大程度上受到 ZMQ 文档 http://zguide.zeromq.org/py:mtserver 的启发):

import zmq
import time
import sys
import threading

#SOCKET_NAME = "tcp://127.0.0.1:8000"
SOCKET_NAME = "inproc://mysocket"

def dealerRoutine(context):
socket = context.socket(zmq.DEALER)
socket.bind(SOCKET_NAME)
time.sleep(12)
socket.send("hello")
socket.send("hello")
print socket.recv()
print socket.recv()
socket.close()


def workerRoutine(context):
socket = context.socket(zmq.REP)
socket.connect(SOCKET_NAME)
s = socket.recv()
print s
socket.send("world")

context = zmq.Context()

workers = []
for i in range(0, 2):
worker = threading.Thread(target=workerRoutine, args=([context]))
workers.append(worker)
worker.start()

dealerRoutine(context)

for worker in workers:
worker.terminated = True

context.term()

我已经使用 inproc 和 tcp 套接字尝试了此代码。

  • 当工作线程尝试连接时,inproc 会出错
  • TCP 只是在经销商处发送后等待,没有从工作人员处出现任何打印,经销商处没有收到其他消息
  • 我考虑了缓慢的加入问题并添加了一个 sleep (一个在工作人员连接之前,一个在经销商的 send() 之前):这只会导致 inproc 的行为与 TCP 相同。

PS:我对驼峰命名法感到抱歉,但我对它上瘾了。

最佳答案

我通过以下方式使其工作:

  • 对于经销商,分多部分发送您的消息,第一部分是空消息,第二部分是您的消息
  • 减少了计时器(但这并没有什么帮助)

这是代码:

import zmq
import time
import sys
import threading

SOCKET_NAME = "tcp://127.0.0.1:8000"
#SOCKET_NAME = "inproc://mysocket"

def dealerRoutine(context):
socket = context.socket(zmq.DEALER)
socket.bind(SOCKET_NAME)
time.sleep(1)
socket.send("", zmq.SNDMORE)
socket.send("hello")
socket.send("", zmq.SNDMORE)
socket.send("hello")
print socket.recv()
print socket.recv()
socket.close()


def workerRoutine(context):
socket = context.socket(zmq.REP)
socket.connect(SOCKET_NAME)
s = socket.recv()
print s
socket.send("world")

context = zmq.Context()

workers = []
for i in range(0, 2):
worker = threading.Thread(target=workerRoutine, args=([context]))
workers.append(worker)
worker.start()

dealerRoutine(context)

for worker in workers:
worker.terminated = True

context.term()

关于python - 多线程和 ZMQ DEALER/REP hello world 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12915982/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com