我已经和皮卡演员库玩过了,我想出了下面这个可怕的愚蠢的例子:
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操作的结果进行打印。
,我想知道是否有可能停止演员,从而取消对请求消息的接收和处理.
我查了图书馆的文件,但我所能找到的只有block停止参数,这意味着完全不同的事情:当设置为False时,它使调用是异步的,但是它有关消息队列的行为是相同的:
stop(block=True,timeout=None) 给演员发一条信息,让它停下来。 如果参与者在调用时停止或正在停止,则返回True。假使演员已经死了。如果块为False,则返回一个封装结果的未来。 在参与者被要求停止之前发送给参与者的消息将在停止之前被正常处理。 在参与者被要求停止后发送给参与者的消息将在参与者停止后用pykka.ActorDeadError回复。 演员可能不会重新开始。 块和超时对于ask()起作用。 返回: pykka.Future,如果阻塞,则返回布尔结果
发布于 2015-02-16 18:35:43
Pykka目前(1.2.0)不支持中断消息队列。
https://stackoverflow.com/questions/28113660
复制相似问题