2017-03-11 88 views
1

我嘗試實現REQ/REP格局,python3 ASYNCIO和ZeroMQpython3 ASYNCIO ZeroMQ .connect()塊

我的客戶異步功能:

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

據我明白ZeroMQ API,在調用.connect()方法不與構建真實連接同步的(如果不是由包裝器引入,基礎API是非阻塞 - REF下文)。

該連接將不會立即執行,而是由ØMQ根據需要執行。因此,成功調用zmq_connect()並不表示物理連接已經或可以實際建立。

Ref.: ZeroMQ API - zmq_connect(3)