File: ping_pong.py

package info (click to toggle)
python-mitogen 0.3.26-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 6,456 kB
  • sloc: python: 22,134; sh: 183; makefile: 74; perl: 19; ansic: 18
file content (46 lines) | stat: -rw-r--r-- 1,395 bytes parent folder | download | duplicates (3)
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
# Wire up a ping/pong counting loop between 2 subprocesses.

from __future__ import print_function
import mitogen.core
import mitogen.select


@mitogen.core.takes_router
def ping_pong(control_sender, router):
    with mitogen.core.Receiver(router) as recv:
        # Tell caller how to communicate with us.
        control_sender.send(recv.to_sender())

        # Wait for caller to tell us how to talk back:
        data_sender = recv.get().unpickle()

        n = 0
        while (n + 1) < 30:
            n = recv.get().unpickle()
            print('the number is currently', n)
            data_sender.send(n + 1)


@mitogen.main()
def main(router):
    # Create a receiver for control messages.
    with mitogen.core.Receiver(router) as recv:
        # Start ping_pong() in child 1 and fetch its sender.
        c1 = router.local()
        c1_call = c1.call_async(ping_pong, recv.to_sender())
        c1_sender = recv.get().unpickle()

        # Start ping_pong() in child 2 and fetch its sender.
        c2 = router.local()
        c2_call = c2.call_async(ping_pong, recv.to_sender())
        c2_sender = recv.get().unpickle()

        # Tell the children about each others' senders.
        c1_sender.send(c2_sender)
        c2_sender.send(c1_sender)

    # Start the loop.
    c1_sender.send(0)

    # Wait for both functions to return.
    mitogen.select.Select.all([c1_call, c2_call])