1

スタックレス Python を始めたばかりです。実行時、つまり を呼び出した後に、いくつかのタスクレットを作成しようとしていますstackless.run()。この関数はメイン スレッドをブロックしないので、必要に応じて新しいタスクレットを作成できると思いました。そこで、タスクレットで実行される 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 秒ごとに新しいタスクレットを作成し、それぞれが「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!
...

しかし、コードを実行しても何も出力されません。

ここで何が問題なのですか?

4

1 に答える 1

1

stackless.schedule()推測ですが、creator() でスリープする前に t.insert() の後に呼び出す必要があると思います。作成者は制御を戻していないと思います。say_hello も同様です。

于 2014-07-25T20:46:53.070 に答える