asyncio客户端/服务器未启动

时间:2019-01-17 10:43:07

标签: python async-await aiohttp

我在设置客户端/服务器体系结构时遇到一些问题。我想用asyncio-> coroutines替换线程。客户端应将某些内容传递给服务器。它可以很好地处理线程。现在,它只是启动客户端,而不是服务器。

这是我的代码

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)

不用担心队列,那就晚了(我希望如此) 有什么建议吗?

0 个答案:

没有答案