这是我在python3.6中的代码
import asyncio
import time
class A():
def __init__(self):
print("A init")
print("actvating1")
loop = asyncio.get_event_loop()
loop.run_until_complete(self.asyncFunc(loop))
print("actvating2")
time.sleep(2)
print("actvating3")
print("end")
loop.close()
def compute_pi(self):
print("3.14???")
async def asyncFunc(self,loop):
loop.call_later(1, self.compute_pi, None)
if __name__== "__main__":
a = A()
结果
A init
actvating1
actvating2
actvating3
end
预期结果
A init
actvating1
actvating2
3.14???
actvating3
end
我希望compute_pi(self)函数起作用。 PyCharm没有打印错误或警告。 我的小姐了解的关键是什么?
答案 0 :(得分:1)
我认为问题是在您入睡时运行compute_pi
的第二个进程已死。这是因为您使用call_later
-asyncFunc
在调用后保持运行,并由于异步而立即返回。这个
class A():
def __init__(self):
print("Actvating")
loop = asyncio.get_event_loop()
loop.run_until_complete(self.asyncFunc(loop))
print("end")
loop.close()
def compute_pi(self):
print("3.14???")
async def asyncFunc(self,loop):
print("Called")
loop.call_later(1, self.compute_pi)
await asyncio.sleep(2)
if __name__== "__main__":
a = A()
打印3.14
。如果删除sleep
或缩短时间,则不会-进程已停止,因此您无法及时到达call_later
。因此,无论等待时间长短,在run_until_complete
外部进行睡眠都不会起作用。您必须保持循环本身处于活动状态,直到回调。