клиент / сервер asyncio не запускается - PullRequest
0 голосов
/ 17 января 2019

У меня проблемы с настройкой архитектуры клиент / сервер. Я хочу заменить потоки на 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)

Не беспокойтесь об очереди, вот позже (я надеюсь, что так) Есть предложения?

...