asyncio-如何在不停止事件循环的情况下停止(并重新启动)服务器?

兴高采烈地

在这种情况下,我正在使用websockets模块。典型的服务器实现是这样的:

import websockets
start_server = websockets.serve(counter, "localhost", 6789)

asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()  

但是,我希望能够停止并重新启动服务器而不停止事件循环。从我所见过的有关asyncio服务器的最小文档以及如何做到这一点来看,我不清楚。我也不知道websockets是否以完全相同的方式实现。

例如,如果我做这样的事情:

def counter():
    start_server = websockets.serve(connection_handler, 'localhost', 6789)
    this = loop.run_until_complete(start_server)
    try:
        loop.run_forever()
    finally:
        this.close()
        loop.run_until_complete(this.wait_closed())  


loop = asyncio.get_event_loop()
loop.create_task(anothertask)
startcounter = counter()

我可以通过调用loop.stop()触发服务器停止。如何在不停止循环的情况下停止服务器(并破坏循环中正在运行的另一个任务)?

用户名

asyncio.create_task循环已在运行时,您可以用来提交任务。run_until_complete()随后run_forever()现在图案反对,因为它是不兼容的asyncio.run,这是现在运行ASYNCIO代码的首选方式。

推荐的方法是asyncio.run在顶层使用启动异步入口点(通常定义为async def main()),然后从那里开始其余的工作。run_until_complete(x)然后变得简单await x,并且run_forever()不需要,因为你可以等待之类的东西server.serve_forever()asyncio.Event自己选择的。

由于serve_foreverwebsockets服务器似乎不存在,因此以下是带有事件(未经测试)的变体:

async def connection_handler(...):
    ...

async def test(stop_request):
    # occasionally stop the server to test it
    while True:
        await asyncio.sleep(1)
        print('requesting stop')
        stop_request.set()

async def main():
    stop_request = asyncio.Event()
    asyncio.create_task(test(stop_request))
    while True:
        print('starting the server')
        server = await websockets.serve(connection_handler, 'localhost', 6789)
        await stop_request.wait()
        stop_request.clear()
        print('stopping the server')
        server.close()
        await server.wait_closed()

asyncio.run(main())

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在不停止/启动本地LXC容器的情况下重新启动juju守护程序?

来自分类Dev

如何在不停止/启动本地LXC容器的情况下重新启动juju守护程序?

来自分类Dev

在kryonet中,如何在不停止程序的情况下与服务器断开连接?

来自分类Dev

如何在不重新启动的情况下升级服务器的内核?

来自分类Dev

如何在不重新启动服务器的情况下更改Javascript?

来自分类Dev

如何在不重新启动韵律服务器的情况下添加muc组件

来自分类Dev

如何在不重新启动的情况下更改领事服务器的 Bootstrap 期望?

来自分类Dev

asyncio(python)如何工作?

来自分类Dev

我如何在不停止服务器的情况下使用django应用程序背后的加密功能?

来自分类Dev

如何在不重新启动服务器的情况下更新服务器的内容?(node.js)

来自分类Dev

如何停止(并重新启动!)龙卷风服务器?

来自分类Dev

asyncio:是否可以在不使用yield from的情况下释放对事件循环的控制?

来自分类Dev

如何在不启动和停止的情况下重新启动Portal Server

来自分类Dev

如何在不启动和停止的情况下重新启动Portal Server

来自分类Dev

如何测量asyncio事件循环的长度?

来自分类Dev

从 asyncio 启动线程是错误的吗?

来自分类Dev

IntelliJ Idea 15-如何在不重新启动服务器的情况下“更新资源”?

来自分类Dev

如何在不重新启动的情况下获得sudo访问?(在远程服务器上)

来自分类Dev

如何使用asyncio实现recvmsg()?

来自分类Dev

如何在Mac OS X上重新启动/停止Arangodb服务器

来自分类Dev

如果停止,如何在远程服务器上重新启动python脚本?

来自分类Dev

如何重置或取消 asyncio.sleep 事件?

来自分类Dev

如何在不停止服务的情况下删除提供服务的软件包?

来自分类Dev

如何不与asyncio循环等待?

来自分类Dev

如何在Python中使用tulip / asyncio创建中继服务器?

来自分类Dev

如何在Python中使用tulip / asyncio创建中继服务器?

来自分类Dev

如何在不停止程序的情况下更改参数

来自分类Dev

如何使用asyncio迭代阻塞迭代器?

来自分类Dev

如何在Asyncio中列出文件?

Related 相关文章

  1. 1

    如何在不停止/启动本地LXC容器的情况下重新启动juju守护程序?

  2. 2

    如何在不停止/启动本地LXC容器的情况下重新启动juju守护程序?

  3. 3

    在kryonet中,如何在不停止程序的情况下与服务器断开连接?

  4. 4

    如何在不重新启动的情况下升级服务器的内核?

  5. 5

    如何在不重新启动服务器的情况下更改Javascript?

  6. 6

    如何在不重新启动韵律服务器的情况下添加muc组件

  7. 7

    如何在不重新启动的情况下更改领事服务器的 Bootstrap 期望?

  8. 8

    asyncio(python)如何工作?

  9. 9

    我如何在不停止服务器的情况下使用django应用程序背后的加密功能?

  10. 10

    如何在不重新启动服务器的情况下更新服务器的内容?(node.js)

  11. 11

    如何停止(并重新启动!)龙卷风服务器?

  12. 12

    asyncio:是否可以在不使用yield from的情况下释放对事件循环的控制?

  13. 13

    如何在不启动和停止的情况下重新启动Portal Server

  14. 14

    如何在不启动和停止的情况下重新启动Portal Server

  15. 15

    如何测量asyncio事件循环的长度?

  16. 16

    从 asyncio 启动线程是错误的吗?

  17. 17

    IntelliJ Idea 15-如何在不重新启动服务器的情况下“更新资源”?

  18. 18

    如何在不重新启动的情况下获得sudo访问?(在远程服务器上)

  19. 19

    如何使用asyncio实现recvmsg()?

  20. 20

    如何在Mac OS X上重新启动/停止Arangodb服务器

  21. 21

    如果停止,如何在远程服务器上重新启动python脚本?

  22. 22

    如何重置或取消 asyncio.sleep 事件?

  23. 23

    如何在不停止服务的情况下删除提供服务的软件包?

  24. 24

    如何不与asyncio循环等待?

  25. 25

    如何在Python中使用tulip / asyncio创建中继服务器?

  26. 26

    如何在Python中使用tulip / asyncio创建中继服务器?

  27. 27

    如何在不停止程序的情况下更改参数

  28. 28

    如何使用asyncio迭代阻塞迭代器?

  29. 29

    如何在Asyncio中列出文件?

热门标签

归档