在运行时创建tasklet

时间:2014-07-25 20:28:18

标签: python python-stackless tasklet

刚开始使用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!
...

但是在运行代码时没有输出。

这里有什么问题?

1 个答案:

答案 0 :(得分:1)

只是一个猜测,但我认为你需要在t.insert()之后调用stackless.schedule()才能在creator()中休眠。我认为创作者并没有给予控制权。 say_hello也是如此。