def call(self, function): async def dispatch(mailbox, function): await mailbox.send(self.server_pid, function, mailbox.pid) result = await mailbox.recv() print('Got result: ', result) spawn(dispatch, function)
def main(number_of_workers=4, duration=30): start = time.monotonic() spawn(collector, number_of_workers, name='collector') executor = futures.ProcessPoolExecutor(max_workers=number_of_workers) for i in range(number_of_workers): node = get_node_instance() node.loop.create_task(dispatch(node.loop, executor, start, duration)) run()
def run(self): async def rpc_server(mailbox, server): while True: function, pid = await mailbox.recv() print('Got call from: ', pid) result = getattr(server, function)() await mailbox.send(pid, result) spawn(rpc_server, self, name='rpc_server')
def test_send_and_recv(self): async def echo_server(mailbox): message, pid = await mailbox.recv() await mailbox.send(pid, message) async def echo_client(mailbox, pid_server): await mailbox.send(pid_server, 'hello', mailbox.pid) await mailbox.recv() pid = spawn(echo_server) spawn(echo_client, pid) run()
from xwing.mailbox import initialize, spawn, run initialize() async def ping(mailbox, n, pong_node): for _ in range(n): await mailbox.send(pong_node, 'ping', mailbox.pid) message = await mailbox.recv() if message[0] == 'pong': print('Ping received pong') await mailbox.send('pong', 'finished') if __name__ == '__main__': # python examples/mailbox/distributed/ping.py spawn(ping, 3, '[email protected]') run()
initialize() async def pong(mailbox): while True: data = await mailbox.recv() if len(data) == 1 and data[0] == 'finished': print('Pong finished') break print('Pong received ping') message, pid = data await mailbox.send(pid, 'pong') async def ping(mailbox, n): for _ in range(n): await mailbox.send('pong', 'ping', mailbox.pid) message = await mailbox.recv() if message[0] == 'pong': print('Ping received pong') await mailbox.send('pong', 'finished') if __name__ == '__main__': # python examples/mailbox/ping_pong.py spawn(pong, name='pong') spawn(ping, 3) run()
from xwing.mailbox import initialize, spawn, run initialize() async def pong(mailbox): while True: data = await mailbox.recv() if len(data) == 1 and data[0] == 'finished': print('Pong finished') break print('Pong received ping') message, pid = data await mailbox.send(pid, 'pong') if __name__ == '__main__': # python examples/mailbox/distributed/pong.py spawn(pong, name='pong') run()
def run_bench(start, duration, data=b'x'): initialize() # initialize a new node with a new event loop spawn(send, start, duration, b'x', 'server') run()
import logging from xwing.mailbox import initialize, spawn, run initialize() logging.basicConfig(level='INFO') async def run_server(mailbox): while True: data = await mailbox.recv() if not data: break sender, message = data await mailbox.send(sender, message) if __name__ == '__main__': spawn(run_server, name='server') run()