刚开始使用Stackless Python。我试图在运行时创建一些tasklet,即在调用stackless.run()
之后。我认为这个函数不会阻塞主线程,所以我可以在必要时创建新的tasklet。所以我决定创建一个在tasklet中运行的tasklet-creator函数。这就是我所拥有的:
import stackless
from time import sleep
def say_hello(s):
while True:
print("Hello, %s!" % s)
sleep(5)
def creator():
i = 0
while True:
i += 1
t = stackless.tasklet(say_hello)(str(i))
t.insert()
sleep(5)
stackless.tasklet(creator)()
stackless.run()
此代码应每5秒创建一个新的tasklet,每个应该打印" Hello,{tasklet的数量}!"无限地(每5秒钟)。预期的输出是:
Hello, 1!
Hello, 1!
Hello, 2!
Hello, 1!
Hello, 2!
Hello, 3!
Hello, 1!
Hello, 2!
Hello, 3!
Hello, 4!
...
但是在运行代码时没有输出。
这里有什么问题?
答案 0 :(得分:1)
只是一个猜测,但我认为你需要在t.insert()之后调用stackless.schedule()
才能在creator()中休眠。我认为创作者并没有给予控制权。 say_hello也是如此。