Un exemple avec Thread :
from time import sleep
from threading import Thread
def A(pause=1):
while True:
print('A')
sleep(pause)
def B(pause=60):
while True:
print('B')
sleep(pause)
t1 = Thread(target=A)
t2 = Thread(target=B)
t1.start()
t2.start()
t1.join()
t2.join()
Le même en asyncio :
import asyncio
async def A(pause=1):
while True:
print('A')
await asyncio.sleep(pause)
async def B(pause=60):
while True:
print('B')
await asyncio.sleep(pause)
loop = asyncio.get_event_loop()
loop.run_until_complete(
asyncio.gather(A(), B())
)
loop.close()
Bien évidement, il est plus propre d'encapsuler les appels à tes fonctions dans une fonction/coroutine qui est uniquement dédiée à la gestion du temps. Exemple avec asyncio :
import asyncio
async def run_periodically(fun, pause):
"""recoit une fonction sans argument,
utiliser functools.partial si necessaire"""
while True:
fun()
await asyncio.sleep(pause)
A = lambda: print('A')
B = lambda: print('B')
loop = asyncio.get_event_loop()
loop.run_until_complete(
asyncio.gather(run_periodically(A, 1),
run_periodically(B, 60))
)
loop.close()