Sto usando il modulo Python3 Asyncio per creare un'applicazione per il bilanciamento del carico. Ho due compiti IO pesanti:Asyncio due loop per diversi compiti di I/O?
- modulo polling Uno SNMP, che determina il miglior server possibile
- Un modulo "proxy-like", che bilancia le petizioni al server selezionato.
Entrambi i processi funzioneranno per sempre, sono indipendenti l'uno dall'altro e non dovrebbero essere bloccati dall'altro.
Non posso usare 1 ciclo di eventi perché si bloccherebbero a vicenda, c'è un modo per avere 2 loop di eventi o devo usare il multithreading/elaborazione?
Ho provato a utilizzare asyncio.new_event_loop() ma non è riuscito a farlo funzionare.
Se progettato nel modo giusto, le coroutine di Asyncio non si bloccheranno a vicenda anche se girano sullo stesso loop. Asyncio passa in modo efficace avanti e indietro tra più coroutine/attività per dare l'effetto della concorrenza, anche se si utilizza un singolo thread. – shongololo
@shongololo ma se ho un ciclo in esecuzione con "loop.run_forever()" blocca il ciclo e non posso fare altro se non lo interrompo. O sto sbagliando sbagliato? Questo è il comportamento che sto vedendo ... – brunoop
non sono sicuro di comprendere appieno il dilemma. C'è qualcosa che ti impedisce di eseguire entrambi nello stesso ciclo? asyncio passerà automaticamente avanti e indietro (all'interno dello stesso ciclo) quando incontrerai i punti "yield from" all'interno del tuo codice. Questo è fondamentalmente il punto di asyncio, ti consente di eseguire più e potenzialmente bloccare le coroutine all'interno dello stesso ciclo senza che si blocchi l'altro. – shongololo