我的代码执行未到达打印语句: print("I want to display after MyClass has started")
为什么会这样?我认为wait 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的常见用法是异步运行两个或多个单独的函数。然而,我的类将对其状态的变化做出响应。例如,我打算在setters中编写代码,以便在类对象属性更改时执行某些操作,同时在后台仍有一个while true事件循环运行。难道没有办法允许这样吗?我已经尝试在它自己的线程中运行事件循环。然而,该线程占主导地位,类对象的响应时间长达几秒钟。这可能是由于gil(全局解释器锁),我们对此无能为力。我也尝试过使用多处理,但是当并行进程在它们自己的内存空间中运行时,我就无法访问对象的属性和方法。
1条答案
按热度按时间kulphzqa1#
在myclass的init方法中调用asyncio.run()-此方法将执行所需的例程,直到该例程终止。在您的例子中,因为main方法包含while true循环,所以它永远不会终止。
下面是对代码的一个轻微修改,它可能显示了您所追求的并发效果-