关机子任务

时间:2019-01-09 09:19:53

标签: python-3.x python-asyncio aiohttp

我使用aiohttp lib来处理WebSockets。也可以使用aio_pika订阅兔子的香奈儿。 获得新的用户连接后,我将创建新任务,该任务是: 1.建立新频道 2.订阅新队列。

这是代码: WebSockets处理程序:

async def index(request):
    ws_current = web.WebSocketResponse()
    ws_ready = ws_current.can_prepare(request)

    queue_name = get_unique_queue_name()
    request.app['users'][queue_name] = ws_current
    await ws_current.prepare(request)
    #create new task
    task = asyncio.create_task(create_queue(queue_name, request.app))
    # other code...

这是create_task函数:

async def create_queue(queue_name, app):
    connection = app.rabbit # connection we made in Application.cleanup_ctx()
    channel = await connection.channel()

    # Declaring queue
    queue = await channel.declare_queue(
        queue_name,
        auto_delete=True
    )

    async for message in queue:
        with message.process():
            ws = app['users'][queue_name]
            import json
            # send to client
            await ws.send_json(json.loads(message.body))

    # have to close channel    
    await channel.close()

是否有适当的方法来关闭“ create_queue”任务?惠特当然会关闭渠道。 在“索引”函数中移动clarify_queue,在“ create_queue”中移动listen_queue只是侦听频道,我认为这样做不是一个好主意,因为在这种情况下,丢失了两个任务。

0 个答案:

没有答案