gpt4 book ai didi

python - 可以在不暂停 Python 解释器的情况下在后台运行异步事件循环吗?

转载 作者:IT老高 更新时间:2023-10-28 20:31:43 25 4
gpt4 key购买 nike

asyncio 的文档提供了两个示例,说明如何每两秒打印一次“Hello World”: https://docs.python.org/3/library/asyncio-eventloop.html#asyncio-hello-world-callback https://docs.python.org/3/library/asyncio-task.html#asyncio-hello-world-coroutine

我可以从解释器中运行它们,但如果我这样做了,我将无法访问解释器。是否可以在后台运行 asyncio 事件循环,以便我可以继续在解释器中输入命令?

最佳答案

编辑:

如果使用 Python 3.8 或更高版本,则应使用 asyncio repl,如 zeronone's answer 中所述.如果使用 3.7 或更低版本,则可以使用此答案。


您可以在后台线程中运行事件循环:

>>> import asyncio
>>>
>>> @asyncio.coroutine
... def greet_every_two_seconds():
... while True:
... print('Hello World')
... yield from asyncio.sleep(2)
...
>>> def loop_in_thread(loop):
... asyncio.set_event_loop(loop)
... loop.run_until_complete(greet_every_two_seconds())
...
>>>
>>> loop = asyncio.get_event_loop()
>>> import threading
>>> t = threading.Thread(target=loop_in_thread, args=(loop,))
>>> t.start()
Hello World
>>>
>>> Hello World

请注意,您必须loop 上调用 asyncio.set_event_loop,否则您会收到一条错误消息,指出当前线程没有没有事件循环。

如果你想从主线程与事件循环交互,你需要坚持 loop.call_soon_threadsafe来电。

虽然这种方法是在解释器中试验的好方法,但在实际程序中,您可能希望所有代码在事件循环中运行,而不是引入线程。 p>

关于python - 可以在不暂停 Python 解释器的情况下在后台运行异步事件循环吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26270681/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com