2017-03-11 2 views
1

내가 python3의 asyncio 및 ZeroMQ과 더불어, REQ/REP 패턴을 구현하려고python3 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 비 블로킹이다 -. 심판 아래).

연결은 즉시 수행되지 않고 ØMQ에서 필요에 따라 수행됩니다. 따라서 zmq_connect()의 성공적인 호출은 실제 연결이 설정되었거나 실제로 설정 될 수 있음을 나타내지 않습니다.

Ref.: ZeroMQ API - zmq_connect(3)