1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
|
#!/usr/bin/env python3
import threading
import time
import pykka
class AnActor(pykka.ThreadingActor):
field = "this is the value of AnActor.field"
def proc(self):
log("this was printed by AnActor.proc()")
def func(self):
time.sleep(0.5) # Block a bit to make it realistic
return "this was returned by AnActor.func() after a delay"
def log(msg):
thread_name = threading.current_thread().name
print(f"{thread_name}: {msg}")
if __name__ == "__main__":
actor = AnActor.start().proxy()
for _ in range(3):
# Method with side effect
log("calling AnActor.proc() ...")
actor.proc()
# Method with return value
log("calling AnActor.func() ...")
result = actor.func() # Does not block, returns a future
log("printing result ... (blocking)")
log(result.get()) # Blocks until ready
# Field reading
log("reading AnActor.field ...")
result = actor.field # Does not block, returns a future
log("printing result ... (blocking)")
log(result.get()) # Blocks until ready
# Field writing
log("writing AnActor.field ...")
actor.field = "new value" # Assignment does not block
result = actor.field # Does not block, returns a future
log("printing new field value ... (blocking)")
log(result.get()) # Blocks until ready
actor.stop()
|