1

私はPykkaアクター ライブラリで遊んでいて、次の素晴らしいばかげた例を思いつきました。

import pykka
from time import sleep

class TestActor(pykka.ThreadingActor):
    def on_receive(self, message):
        sleep(1)
        print(message["v"])    

a = TestActor.start()
for i in xrange(10):
    print("asking for " + str(i))
    a.tell({"v":i})
print(a.stop())

期待される結果が得られます: 10がすぐに印刷され、別の 10 行がそれぞれ 1 秒間に印刷されます。

asking for 0
asking for 1
asking for 2
asking for 3
asking for 4
asking for 5
asking for 6
asking for 7
asking for 8
asking for 9
0
1
2
3
4
5
6
7
8
9
True

すべてのリクエストがアクターによって処理された後、アクションTrueの結果として出力されます。stop

アクターを停止して、リマイニング メッセージの受信と処理をキャンセルすることは可能でしょうか。

ライブラリのドキュメントを確認しましたが、見つけることができるのはblockstop パラメーターだけです。これはまったく異なることを意味します。これを設定するFalseと、呼び出しは非同期になりますが、メッセージ キューに関する動作は同じです。

停止 (ブロック = True、タイムアウト = なし)

アクターに停止を求めるメッセージを送信します。

アクターが停止しているか、呼び出し時に停止中であった場合は True を返します。アクターがすでに死んでいた場合は false。block が False の場合、結果をラップする future を返します。

アクターが停止を要求される前にアクターに送信されたメッセージは、停止する前に通常どおり処理されます。

アクターが停止を要求された後にアクターに送信されたメッセージは、停止後に pykka.ActorDeadError で応答されます。

アクターが再起動されない可能性があります。

ブロックとタイムアウトは、ask() と同じように機能します。

戻り値: pykka.Future、またはブロックしている場合はブール値の結果

4

1 に答える 1