我玩过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 消息。
我已经检查了库文档,但我能找到的只是block
stop 参数,这意味着完全不同的事情:当设置为它时,False
它使调用成为异步的,但它关于消息队列的行为是相同的:
停止(块=真,超时=无)
向演员发送消息,要求其停止。
如果 actor 在调用时已停止或正在停止,则返回 True。如果演员已经死了,则为假。如果 block 为 False,则返回包装结果的 future。
在要求actor停止之前发送给actor的消息将在它停止之前正常处理。
在 Actor 被要求停止后发送给 Actor 的消息将在其停止后以 pykka.ActorDeadError 进行回复。
演员可能不会重新启动。
阻塞和超时与 ask() 一样。
返回:pykka.Future,如果阻塞则返回布尔值