Python: блокировка Asyncio NATS.io
У меня проблемы с тем, чтобы Python Asyncio NATS.io работал последовательно. У меня есть два класса: Account
а также Bridge
Учетная запись содержит логику приложения и передает мысли Bridge
с внешним сервисом через 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
учебный класс:
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)
Мне нужно позвонить account.connect()
из любой точки внутри класса учетной записи и получить результат подключения (последовательно). теперь я получаю generator
объект
1 ответ
Ваш 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()