On Tuesday, August 23, 2016 at 4:09:07 PM UTC+3, dimao wrote: > I am trying to implement multi-client service. The service must be able to: > > connect to the server; > send/receive messages; > wait until a new message will be received > *** Per each client and non blocking > > My current code takes almost 99% CPU usage. Here is the main part of my code : > > > PORT = 33123 > HOST = '127.0.0.1' > > > import asyncio > import os > > @asyncio.coroutine > def tcp_echo_client(offset): > > def send(offset): > MSG = """{"ClientId":"%s", % (str(offset))"}""" > > print("> " + MSG) > writer.write((MSG).encode("utf-8")) > > > def recv(): > msgback = (yield from reader.readline()).decode("utf-8").rstrip() > print("< " + msgback) > return msgback > > reader, writer = yield from asyncio.open_connection(HOST, port=PORT) > > > print(reader) > print('Waiting 3 sec for response...') > > while True: > response = yield from asyncio.wait_for(reader.readline(), > timeout=5.0) > print(response) > send(offset) > > yield from asyncio.sleep(0.5) > > @asyncio.coroutine > def do_work(task_name, work_queue): > while not work_queue.empty(): > queue_item = yield from work_queue.get() > print('{0} grabbed item: {1}'.format(task_name, queue_item)) > asyncio.Task(tcp_echo_client(offset=queue_item)) > yield from asyncio.sleep(0.1) > > > if __name__ == "__main__": > q = asyncio.Queue() > > for x in range(100): > q.put_nowait(x) > > print(q) > > loop = asyncio.get_event_loop() > > tasks = [ > asyncio.async(do_work('task1', q)), > asyncio.async(do_work('task2', q)), > asyncio.async(do_work('task3', q)), > asyncio.async(do_work('task4', q)), > asyncio.async(do_work('task5', q)), > asyncio.async(do_work('task6', q)) > ] > > loop.run_until_complete(asyncio.wait(tasks)) > loop.run_forever() > loop.close()
Can any one help me ? -- https://mail.python.org/mailman/listinfo/python-list