У меня проблемы с настройкой архитектуры клиент / сервер. Я хочу заменить потоки на asyncio -> сопрограммы. Клиент должен что-то передать на сервер. Работало с поточностью нормально. Теперь он только запускает клиента, но не сервер.
Вот мой код
runner.py:
import asyncio
from communication import Communcication
from methods import Methods
from http_server import AioHttpServer
# creating instance of class Methods
methods = Methods()
# creating instance of class Connection
communication= Communcication(methods)
# creating instance of class aio
httpServer = AioHttpServer()
class Runner:
async def main(self):
task1 = asyncio.ensure_future(communication.run())
task2 = asyncio.ensure_future(httpServer.run())
await task1
await task2
await asyncio.gather(task1, task2)
runner = Runner()
try:
loop = asyncio.get_event_loop()
loop.run_until_complete(runner.main())
except Exception as e:
pass
finally:
loop.close()
Насколько я понял, мне нужно запустить две сопрограммы. Это работало с потоками. Моими двумя сопрограммами должны быть связь -> клиент и http сервер -> конечно же сервер.
В обоих вызванных методах асинхронный и не имеет каких-либо событий event_loops.
Может быть, http:
import asyncio
from aiohttp import web
class AioHttpServer():
async def run(self):
# initialize the queue
in_q = asyncio.Queue()
async def handle(res):
q_param = in_q.get()
while not in_q.empty():
q_param = in_q.get()
in_q.task_done()
res = q_param
in_q.task_done()
return web.json_response({"parameters": res})
app = web.Application()
app.router.add_get('/', handle)
web.run_app(app)
Не беспокойтесь об очереди, вот позже (я надеюсь, что так)
Есть предложения?