Pykka:如何在已停止时取消actor的待处理消息队列

时间:2015-01-23 15:52:09

标签: python concurrency actor pykka

我和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

我想知道是否有可能阻止演员取消接收和处理重新录制的消息。

I've checked the library documentation但我能找到的只是block停止参数,这意味着一个完全不同的东西:当设置为False时,它使调用成为异步但它的行为与消息有关队列是一样的:

  

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

     

向演员发送消息,询问它   停下来。

     

如果actor在此时停止或正在停止,则返回True   电话。如果演员已经死了,那就错了。如果block为False,则为   返回包装结果的未来。

     

在要求演员停止之前发送给演员的消息将是   在停止之前正常处理。

     

请求演员停止后发送给演员的消息将是   停止后回复到pykka.ActorDeadError。

     

演员可能无法重启。

     

阻止和超时与ask()相同。

     

返回:pykka.Future,如果阻塞

,则返回布尔值结果

1 个答案:

答案 0 :(得分:1)

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

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