小编GHH*_*HHT的帖子

使用ZeroMQ与死服务器时终止python脚本

我在使用ZeroMQ时关闭python应用程序时遇到问题.首先我连接到未运行的服务器!

context = zmq.Context()
socket = context.socket(zmq.REQ)
socket_id = randomID()
socket.setsockopt(zmq.IDENTITY, socket_id)
socket.connect("tcp://dead_server")
poller = zmq.Poller()
poller.register(socket, zmq.POLLIN)
Run Code Online (Sandbox Code Playgroud)

并发送我的消息

socket.send(msg)
Run Code Online (Sandbox Code Playgroud)

等待回复

sockets = dict(poller.poll(1000))

if sockets.get(socket) == zmq.POLLIN:
    result = socket.recv()
    print (result)
Run Code Online (Sandbox Code Playgroud)

所以服务器已经死了,消息将不会发送,也没有回复.这是真的.然后我关闭套接字并从poller取消注册然后使用新套接字连接到活动服务器,我通过套接字发送消息并从中获取回复.

poller.unregister(socket)
socket.close()

socket = context.socket(zmq.REQ)
socket.setsockopt(zmq.IDENTITY, socket_id)
poller.register(socket, zmq.POLLIN)
socket.connect("tcp://alive_server")
socket.send(msg)

sockets = dict(poller.poll(1000))

if sockets.get(socket) == zmq.POLLIN:
    result = socket.recv()
    print (result)

# Every thing ok up to hear
Run Code Online (Sandbox Code Playgroud)

之后应用程序(python脚本)没有关闭(终止)!这是我的问题.[我可以关闭应用程序,sig_term但我不会出于某种原因使用它.]如果我不向死服务器发送第一条消息,应用程序将真正关闭.我想问题是ZeroMQ io线程,但我无法解决它.

exit(0)    # Not worked
sys.exit(0)    # Not worked
Run Code Online (Sandbox Code Playgroud)

python termination zeromq pyzmq

7
推荐指数
1
解决办法
1434
查看次数

ZeroMQ ROUTER套接字无法向REP套接字发送消息

我使用ZeroMQ实现了一个简单的请求 - 回复架构和路由器.这适用于PyZMQ版本2.1.11.不幸的是,当我在PyZMQ版本14.0.0上测试它时,发送方(REQ)可以发送到路由器然后路由器收到它的消息并发送到接收方(REP)但接收方没有收到消息!当我将PyZMQ从2.1.11升级到14.0.0时,我遇到了这个问题.

REQ < - > ROUTER < - > REP

这是我的代码:

sender.py

import zmq
import time

if __name__=='__main__':
    context = zmq.Context()
    socket = context.socket(zmq.REQ)
    socket.setsockopt(zmq.IDENTITY, "S")
    socket.connect("tcp://127.0.0.1:6660")
    i = 0
    while True:
        i += 1
        socket.send("R", zmq.SNDMORE)
        socket.send("", zmq.SNDMORE)
        socket.send("Message: %d" % i)
        print("Message : %d sent" % i)
        fromAddr = socket.recv()
        empty = socket.recv()
        resp = socket.recv()
        print("%s received!" % str(resp))
        time.sleep(1)
Run Code Online (Sandbox Code Playgroud)

router.py

import zmq
import time

if __name__=='__main__':
    context = zmq.Context()
    frontend …
Run Code Online (Sandbox Code Playgroud)

python sockets zeromq pyzmq

5
推荐指数
1
解决办法
2784
查看次数

标签 统计

python ×2

pyzmq ×2

zeromq ×2

sockets ×1

termination ×1