首页 文章

python3 asyncio ZeroMQ .connect()块

提问于
浏览
1

我尝试使用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" ) 方法的调用是一种阻塞方法 .

在我的情况下,如何进行非阻塞连接呼叫?

1 回答

  • 1

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

    根据需要,ØMQ不会立即执行连接 . 因此,成功调用zmq_connect()并不表示实际 Build 了物理连接 .

    Ref.: ZeroMQ API - zmq_connect(3)

相关问题