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

我想知道是否有可能停止演员,从而取消接收和处理 reaming 消息。

我已经检查了库文档,但我能找到的只是blockstop 参数,这意味着完全不同的事情:当设置为它时,False它使调用成为异步的,但它关于消息队列的行为是相同的:

停止(块=真,超时=无)

向演员发送消息,要求其停止。

如果 actor 在调用时已停止或正在停止,则返回 True。如果演员已经死了,则为假。如果 block 为 False,则返回包装结果的 future。

在要求actor停止之前发送给actor的消息将在它停止之前正常处理。

在 Actor 被要求停止后发送给 Actor 的消息将在其停止后以 pykka.ActorDeadError 进行回复。

演员可能不会重新启动。

阻塞和超时与 ask() 一样。

返回:pykka.Future,如果阻塞则返回布尔值

4

1 回答 1

1

Pykka 当前 (1.2.0) 不支持中断消息队列。

来源:https ://github.com/jodal/pykka/issues/46

于 2015-02-16T18:35:43.170 回答