J'ai ce code pour tester comment fonctionne asyncio fonctionne:python asyncio gestionnaire des explications et des signaux
stop = False
async def subcoro():
# same result even with a range of 30
for i in range(30000):
pass
async def first():
global stop
while not stop:
await subcoro()
# without sleep no signal is triggered
await asyncio.sleep(0.1)
async def main(loop):
coro = asyncio.ensure_future(first())
await asyncio.wait([coro], loop=loop)
def end():
global stop
stop = True
if __name__ == '__main__':
loop = asyncio.get_event_loop()
for signame in ('SIGINT', 'SIGTERM'):
loop.add_signal_handler(getattr(signal, signame), end)
try:
loop.run_until_complete(asyncio.ensure_future(main(loop)))
finally:
loop.close()
print('Bye!')
Pourquoi j'ai à faire first()
sommeils pendant un certain temps (même inférieur à 0,1) pour rendre la poignée de programme les signaux? Existe-t-il un autre moyen d'arrêter gracieusement toutes les coroutines et la boucle d'événements?
MISE À JOUR: Sur python-forum.org, ils m'ont dit de lire au PEP-0492 mais cela ne fournissait aucune solution ou suggestion.
MAJ2: Mon application réelle: https://github.com/FedericoTorsello/Embedded/tree/serialIO
Pouvez-vous s'il vous plaît nous faire un exemple minimal, complet et vérifiable de votre problème à l'intérieur de votre question, s'il vous plaît? http://stackoverflow.com/help/mcve –
Désolé, mais l'application dans le lien est assez 'minimale' (connectez-vous à arduino, définissez le thread du lecteur et exécutez coroutines). J'ai compris que le problème est l'appel à une fonction dans un autre thread qui lit les données de la série qui n'est pas bien gérée en boucle asyncio. Je vais essayer de passer à la serial.aio expérimentale de comprendre comment envelopper la fonction «write_line» dans une coroutine. – edoz90