python - 重复构造和销毁上下文会出现错误 #1260

标签 python zeromq pyzmq

在我的项目下,我需要重复构建和销毁上下文,但它给出了错误。

例如:

import zmq

for i in range(100):
    print(i)
    context = zmq.Context()
    data_socket = context.socket(zmq.SUB)
    data_socket.connect("tcp://127.0.0.1:5552")
    data_socket.setsockopt_string(zmq.SUBSCRIBE, "")
    context.destroy()

它返回

0
1
2
3
4
5
6
7
8
9
10
11
12
13
Traceback (most recent call last):
  File "test.py", line 7, in <module>
    data_socket.connect("tcp://127.0.0.1:5552")
  File "zmq/backend/cython/socket.pyx", line 580, in zmq.backend.cython.socket.Socket.connect
  File "zmq/backend/cython/checkrc.pxd", line 25, in zmq.backend.cython.checkrc._check_rc
zmq.error.ZMQError: Socket operation on non-socket

最佳答案

Socket 选项必须放在 .connect().bind() 方法之前,并且您可以从 zmq.Context( )

尝试一下:

import zmq

context = zmq.Context.instance()

for i in range(100):
    print(i)
    data_socket = context.socket(zmq.SUB)
    data_socket.setsockopt(zmq.SUBSCRIBE, b"")
    data_socket.connect("tcp://127.0.0.1:5552")

context.destroy()
<小时/>

[您的答案]:

但是,如果您想按照自己的方式进行操作,则应该在每次迭代中关闭套接字,因此您的代码片段将是:

import zmq

for i in range(100):
    ctx = zmq.Context.instance()
    sock = ctx.socket(zmq.SUB)
    sock.setsockopt(zmq.SUBSCRIBE, b'')
    sock.connect('tcp://127.0.0.1:5552')
    sock.close()  # Note
    ctx.destroy()
    print('ctx closed status: ', ctx.closed, ' iteration: ', i)

输出:

('ctx closed status: ', True, ' iteration: ', 0)
('ctx closed status: ', True, ' iteration: ', 1)
('ctx closed status: ', True, ' iteration: ', 2)
('ctx closed status: ', True, ' iteration: ', 3)
('ctx closed status: ', True, ' iteration: ', 4)
('ctx closed status: ', True, ' iteration: ', 5)
('ctx closed status: ', True, ' iteration: ', 6)
('ctx closed status: ', True, ' iteration: ', 7)
('ctx closed status: ', True, ' iteration: ', 8)
('ctx closed status: ', True, ' iteration: ', 9)
('ctx closed status: ', True, ' iteration: ', 10)
('ctx closed status: ', True, ' iteration: ', 11)
('ctx closed status: ', True, ' iteration: ', 12)
('ctx closed status: ', True, ' iteration: ', 13)
('ctx closed status: ', True, ' iteration: ', 14)
.
.
.

关于python - 重复构造和销毁上下文会出现错误 #1260,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54659190/

相关文章:

python - 如何在单个 ZMQ 发送请求中同时发送图像(ndarray)和字符串数据

即使安装了Python模块也找不到错误

python - 无法通过 python3 启动 Selenium Safari WebDriver

python - 如何使用模拟来 stub 方法装饰器?

python - 融化唯一索引的 pandas 数据帧以与 ggplot/rpy2 一起使用

python - 更新libzmq后pyzmq导入错误

python - 如何检查 Docker 中是否安装了 python 包?

visual-studio - 链接到 VS 中的静态 0MQ 库

python - 由 zeromq 触发的 nginx 背后的 Websockets?

javascript - 使用 mongodb 将 ZMQ 套接字与 Express app.js 分离