Создавайте тасклеты во время выполнения

Просто начинаю с Stackless Python. Я пытаюсь создать некоторые тасклеты во время выполнения, то есть после вызова stackless.run(), Я думал, что эта функция не будет блокировать основной поток, поэтому я мог бы создавать новые тасклеты, когда это необходимо. Поэтому я решил создать функцию создателя тасклетов, которая запускается в тасклете. Вот что у меня есть:

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 секунд, и каждый из них должен напечатать "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!
...

Но при запуске кода нет вывода.

Что здесь не так?

1 ответ

Решение

Просто предположение, но я думаю, что вам нужно позвонить stackless.schedule() после t.insert() перед сном в создателе (). Я думаю, что создатель не возвращает контроль. То же самое для say_hello.

Другие вопросы по тегам