Создавайте тасклеты во время выполнения
Просто начинаю с 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.