如何在Python中使用aiohttp或asyncio创建并行循环?

2024-09-28 17:19:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我想使用reinstdb.changes()特性将一些消息推送到用户。消息应该在没有用户请求的情况下发送。在

我正在使用rejectdb和aiohttp和websockets。工作原理:

  1. 用户发送消息
  2. 服务器将其放入rewingdb
  3. 我需要的是:一个附加的循环使用reinstdb.changes函数向连接的用户发送更新

我是这样启动应用程序的:

@asyncio.coroutine
def init(loop):
    app = Application(loop=loop)
    app['sockets'] = []
    app['susers'] = []
    app.router.add_route('GET', '/', wshandler)
    handler = app.make_handler()
    srv = yield from loop.create_server(handler, '127.0.0.1', 9080)
    print("Server started at http://127.0.0.1:9080")
    return app, srv, handler

wshandler中,我有一个循环,它处理传入的消息:

^{pr2}$

如何创建第二个循环,向同一个打开的连接池发送消息?如何使其线程安全?在


Tags: 用户loopapp消息aiohttpwebsockets情况特性
1条回答
网友
1楼 · 发布于 2024-09-28 17:19:17

一般来说,在运行事件循环时,应该尽量避免线程。在

不幸的是,rethinkdb不支持现成的asyncio,但它确实支持Tornado & Twisted框架。 因此,您可以bridgeTornado&;asyncio使其工作而不使用线程。在

编辑

正如Andrew所指出的,rethinkdb确实支持asyncio。在2.1.0之后,您大概可以:

rethinkdb.set_loop_type("asyncio")

然后在web处理程序中:

^{pr2}$

相关问题 更多 >