首先是我的代码(很大程度上来自 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 只是在经销商发送后等待,工人没有打印,经销商没有收到其他消息
- 我已经想到了慢连接器问题并添加了一个睡眠(一个在工人连接之前,一个在经销商的 send() 之前):这只会导致 inproc 的行为与 TCP 相同。
PS:我很抱歉camelCase,但我对它上瘾了。