Voir :
Exemple d'une fonction sans callback
#! /usr/bin/env python3 from functools import reduce def calcfact(i): assert i >= 0 return reduce(lambda a, b: a * b, range(1, i+1) if i > 1 else [1]) print(calcfact(3))
Exemple de la même fonction avec callback optionnel
#! /usr/bin/env python3 from functools import reduce def calcfact_called(i, res): print(i, '! = ', res, sep='') def calcfact(i, callback=None): assert i >= 0 res = reduce(lambda a, b: a * b, range(1, i+1) if i > 1 else [1]) if callback is None: return res else: callback(i, res) # Sans Callback print(calcfact(3)) # Avec Callback calcfact(4, calcfact_called)
#! /usr/bin/env python3 import asyncio def waitplop_called(i): print(i) async def waitplop(i, callback=None): await asyncio.sleep(i) if callback is None: return i else: callback(i) async def main(): async with asyncio.TaskGroup() as tg: # Asynchronous with callback tg.create_task(waitplop(3, waitplop_called)) tg.create_task(waitplop(3, waitplop_called)) # Synchronous / sequential without callback task1 = await tg.create_task(waitplop(4)) print(task1) asyncio.run(main())
$ time ./plop.py 3 3 4 real 0m4.120s user 0m0.095s sys 0m0.024s
Voir :
#! /usr/bin/env python3 import asyncio def waitplop_called(task): print(task.result()) async def waitplop(i): await asyncio.sleep(i) return i async def main(): task = asyncio.create_task(waitplop(3)) task.add_done_callback(waitplop_called) await asyncio.gather(task) asyncio.run(main())
Voir :
# Call 'print("Future:", fut)' when "fut" is done. fut.add_done_callback( functools.partial(print, "Future:"))