【问题标题】:python3 asyncio ZeroMQ .connect() blockspython3 asyncio ZeroMQ .connect() 块
【发布时间】:2017-03-12 06:39:46
【问题描述】:

我尝试使用 python3 asyncio 和 ZeroMQ 实现 REQ/REP 模式

我的客户端异步函数:

import zmq
import os
from time import time
import asyncio

import zmq.asyncio


print ('Client %i'%os.getpid())

context = zmq.asyncio.Context(1)
loop = zmq.asyncio.ZMQEventLoop()
asyncio.set_event_loop(loop)


async def client():
    socket = context.socket(zmq.REQ)
    socket.connect('tcp://11.111.11.245:5555')
    while True:
        data = zmq.Message(str(os.getpid()).encode('utf8'))
        start = time()
        print('send')
        await socket.send(data)
        print('wait...')
        data = await socket.recv()
        print('recv')
        print(time() - start, data)


loop.run_until_complete(client())

据我了解,对 socket.connect( "tcp://11.111.11.245:5555" ) 方法的调用是一种阻塞方法。

就我而言,如何进行非阻塞连接调用?

【问题讨论】:

    标签: python-3.x zeromq blocking python-asyncio


    【解决方案1】:

    据我了解 ZeroMQ API,对 .connect() 方法的调用与构建实际连接不同步(如果不是由包装器引入,则底层 API 是非阻塞的 -参考下面)。

    连接不会立即执行,而是根据 ØMQ 的需要执行。因此,成功调用 zmq_connect() 并不表示物理连接已经或可以实际建立。

    Ref.: ZeroMQ API - zmq_connect(3)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-23
      • 1970-01-01
      • 1970-01-01
      • 2015-10-15
      • 1970-01-01
      • 1970-01-01
      • 2019-07-06
      • 2021-09-28
      相关资源
      最近更新 更多