websockets asyncio服务器示例上的多个事件循环

时间:2018-04-25 03:47:46

标签: python concurrency websocket python-asyncio

我很难理解下面代码的原因,希望有人可以对此有所了解。我是异步编程的新手。

这是来自websockets文档

#!/usr/bin/env python

import asyncio
import websockets

async def echo(websocket, path):
    async for message in websocket:
        await websocket.send(message)

asyncio.get_event_loop().run_until_complete(
    websockets.serve(echo, 'localhost', 8765))
asyncio.get_event_loop().run_forever()

我对asyncio设计以及如何利用这一点有一些疑问。

首先,看看最后两行。如果我理解正确,完成工作后不应该运行run_until_complete吗?如果第二个循环没有提交到循环中的作业,它怎么能保持活着?

其次,我试图构建一个back_end,它可以使用websockets处理来自front_end的一些数据,并实时返回计算结果。将会有两种任务,一种是需要计算能力的位长,但会发生一次会话,以及需要立即发回的流数据处理(每秒90帧)。

对于更大的任务,我应该启动另一个处理更长工作的websocket服务器,并使用主websocket来消耗它吗?或者使用另一个进程在链式异步函数中完成工作?对于较小的任务,如果我像上面那样做会出什么问题?

TLDR:

  1. 异步编程正在撼动我的大脑。
  2. 维持非阻止会话
  3. 哪个过程努力工作和轻松同时工作
  4. 轻松工作应具有零延迟
  5. 努力工作应该尽可能快,但不要影响轻松工作。
  6. 谢谢!

0 个答案:

没有答案