2017-04-04 9 views
0

파이썬 Asyncio NATS.io를 순차적으로 실행하는 데 문제가 있습니다. 나는 두 클래스가 있습니다 : AccountBridge 계정은 응용 프로그램의 논리를 가지고 있으며 NATS.io를 통해 외부 서비스와 함께 생각한 것입니다 (Bridge).파이썬 : Asyncio NATS.io 차단

Main 파일 :

loop = asyncio.get_event_loop() 
account = Account(loop, options) 
asyncio.async(account.start()) 
loop.run_forever() 

Account 클래스 :

class Account: 
    bridge = Bridge() 

    def connect(self): 
     result = self.bridge.connect(self.id) 
     return result 

Bridge 클래스 :

난 아무데도 계정 클래스 내부에서 account.connect()를 호출 (연결의 결과를 얻을 필요가
def connect(self, account_id): 
    data = None 

    try: 
     response = yield from self.nc.timed_request("bank.account.connect", 
        BankRequest(
          method="connect", 
          data={...} 
        ), 10) 
     data = json.loads(response.data.decode()) 
    except ErrTimeout: 
     status = Messages.REQUEST_TIMED_OUT 

    return Result(data=data) 

순차적). 지금은 객체 generator지고있어

답변

0

당신의 connect() 방법은 아마 코 루틴해야한다 :

class Account: 
    bridge = Bridge() # you probably want to put this in `def __init__(self)`! 

    @asyncio.coroutine 
    def connect(self): 
     result = yield from self.bridge.connect(self.id) 
     return result 

class Bridge: 
    @asyncio.coroutine 
    def connect(self, account_id): 
     data = None 

     try: 
      response = yield from self.nc.timed_request("bank.account.connect", 
         BankRequest(
           method="connect", 
           data={...} 
         ), 10) 
      data = json.loads(response.data.decode()) 
     except ErrTimeout: 
      status = Messages.REQUEST_TIMED_OUT 

     return Result(data=data) 

과 :

resp = yield from account.connect()