コード例 #1
0
ファイル: rpc.py プロジェクト: victorpoluceno/xwing
    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)
コード例 #2
0
ファイル: run.py プロジェクト: victorpoluceno/xwing
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()
コード例 #3
0
ファイル: rpc.py プロジェクト: victorpoluceno/xwing
    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')
コード例 #4
0
    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()
コード例 #5
0
ファイル: ping.py プロジェクト: victorpoluceno/xwing
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()
コード例 #6
0
ファイル: ping_pong.py プロジェクト: victorpoluceno/xwing
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()
コード例 #7
0
ファイル: pong.py プロジェクト: victorpoluceno/xwing
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()
コード例 #8
0
ファイル: run.py プロジェクト: victorpoluceno/xwing
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()
コード例 #9
0
ファイル: server.py プロジェクト: victorpoluceno/xwing
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()