我和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,如果阻塞
,则返回布尔值结果