我在设置客户端/服务器体系结构时遇到一些问题。我想用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)
不用担心队列,那就晚了(我希望如此) 有什么建议吗?