【问题标题】:Create tasklets at runtime在运行时创建小任务
【发布时间】:2014-09-17 19:04:45
【问题描述】:

刚开始使用 Stackless Python。我试图在运行时创建一些小任务,即在调用stackless.run() 之后。我认为这个函数不会阻塞主线程,所以我可以在必要时创建新的小任务。所以我决定制作一个在 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, {number of tasklet}!”无限次(也是每 5 秒一次)。预期的输出是:

Hello, 1!
Hello, 1!
Hello, 2!
Hello, 1!
Hello, 2!
Hello, 3!
Hello, 1!
Hello, 2!
Hello, 3!
Hello, 4!
...

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

这里有什么问题?

【问题讨论】:

    标签: python python-stackless tasklet


    【解决方案1】:

    只是一个猜测,但我认为您需要在 t.insert() 之后调用 stackless.schedule(),然后才能在 creator() 中睡觉。我认为创作者没有给予控制权。 say_hello 也一样。

    【讨论】:

      猜你喜欢
      • 2012-05-30
      • 1970-01-01
      • 2021-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-24
      相关资源
      最近更新 更多