【发布时间】:2023-03-06 09:29:01
【问题描述】:
我的代码执行没有到达打印语句:print("I want to display after MyClass has started")
这是为什么?我认为 await asyncio.sleep() 的目的是取消阻止代码的执行,以便后续代码行可以运行。不是这样吗?
import asyncio
class MyClass:
def __init__(self):
self.input = False
asyncio.run(self.start())
print("I want to display after MyClass has started") #This line is never reached.
async def start(self):
while True:
print("Changing state...")
if self.input:
print("I am on.")
break
await asyncio.sleep(1)
m = MyClass()
m.input = True #This line is never reached! Why?
print("I want to display after MyClass is started")
当我执行时,它会一直打印“正在更改状态...”。即使当我 ctrl+c 退出时,执行也会继续,如下所示。如何正确终止执行?抱歉,我是 python 新手。
编辑: 我很欣赏 asyncio 的常见用途是异步运行两个或多个单独的函数。但是,我的班级将对其状态的变化做出反应。例如,我打算在设置器中编写代码以在类对象属性更改时执行某些操作-同时在后台运行 while True 事件循环。有没有办法允许这样做?我试过在它自己的线程中运行事件循环。但是,该线程随后占主导地位,并且类对象响应时间长达几秒钟。这可能是由于我们无能为力的 GIL(全局解释器锁)。我也尝试过使用多处理,但是当并行进程在它们自己的内存空间中运行时,我无法访问对象的属性和方法。
【问题讨论】:
标签: python asynchronous async-await python-asyncio sleep