A tasks list and run every element again when finish

Hello. I'm using the asyncio module. I have a list with different task, every tasks has different time to be done. In a figure: fn 1 -> -> -> -> fn 2 --> --> --> --> --> . . . fn N -----> -----> -----> -----> So i need to repeat every task when its done. I tried to use 'while' but while have to complete all list first to repeat the list, this is not useful for me. Y ask you, fellows, about if there are a way to do that. In particular these tasks are with socket and communication methods. I ve tried with multiprocess but the broke because are different loop events. Yes, i tryyo mix asyncio with multiprocess, but in this case didn't work I will be very thankfull of you. Best Regards! -- David A. Pineda Osorio F:+56 9 82142267 Ingeniero Civil Electricista Universidad de Chile

I answer myself. Mabe it's useful for the DOCUMENTATION: SIMPLE SOL: import asyncio async def holacoro(): print("Hola %d" % 1) await asyncio.sleep(1) def renew(*args): task=loop.create_task(holacoro()) task.add_done_callback(renew) task=loop.create_task(holacoro()) task.add_done_callback(renew) loop=asyncio.get_event_loop() try: loop.run_forever() except KeyboardInterrupt: print('Loop stopped') BETTER SOL: import asyncio import functools async def holacoro(v): print("Hola %d" % v) await asyncio.sleep(1) return v+1 #special for every coroutine async def coromask(coro, args): result=await coro(*args) return [result] def renew(task, coromask, coro, *args): print(task.result()) task=loop.create_task(coromask(coro,task.result())) task.add_done_callback(functools.partial(renew, task, coromask, coro)) args=[1] task=loop.create_task(coromask(holacoro,args)) task.add_done_callback(functools.partial(renew, task, coromask, holacoro)) loop=asyncio.get_event_loop() try: loop.run_forever() except KeyboardInterrupt: print('Loop stopped') BETTER WITH 2 CORO: import asyncio import functools async def holacoro(v): print("Hola %d" % v) await asyncio.sleep(1) return v+1 async def sumacoro(*args): c=sum(args) print("La suma es %d" %c) await asyncio.sleep(3) return c #special for every coroutine async def coromask(coro, args): result=await coro(*args) return [result] #special for every coroutine async def coromask_suma(coro, args): _in=[args[-1]] result=await coro(*args) _in.append(result) return _in def renew(task, mask, coro, *args): result=task.result() task=loop.create_task(mask(coro,result)) task.add_done_callback(functools.partial(renew, task, mask, coro)) loop=asyncio.get_event_loop() args=[1] task1=loop.create_task(coromask(holacoro,args)) task1.add_done_callback(functools.partial(renew, task1, coromask, holacoro)) args2=[1,2] task2=loop.create_task(coromask_suma(sumacoro,args2)) task2.add_done_callback(functools.partial(renew, task2, coromask_suma, sumacoro)) try: loop.run_forever() except KeyboardInterrupt: print('Loop stopped') 2016-11-23 11:53 GMT-03:00 David Pineda <dahalpi@gmail.com>:
Hello.
I'm using the asyncio module. I have a list with different task, every tasks has different time to be done.
In a figure:
fn 1 -> -> -> -> fn 2 --> --> --> --> --> . . . fn N -----> -----> -----> ----->
So i need to repeat every task when its done.
I tried to use 'while' but while have to complete all list first to repeat the list, this is not useful for me.
Y ask you, fellows, about if there are a way to do that. In particular these tasks are with socket and communication methods. I ve tried with multiprocess but the broke because are different loop events. Yes, i tryyo mix asyncio with multiprocess, but in this case didn't work
I will be very thankfull of you.
Best Regards!
-- David A. Pineda Osorio F:+56 9 82142267 Ingeniero Civil Electricista Universidad de Chile
-- David A. Pineda Osorio F:+56 9 82142267 Ingeniero Civil Electricista Universidad de Chile
participants (1)
-
David Pineda