Par exemple, supposons que vous souhaitiez continuer à détecter des objets sur un terminal périphérique et envoyer les résultats du traitement au serveur. Si le traitement HTTP POST est inséré pendant le traitement de la boucle de détection, le traitement s'arrêtera jusqu'à ce qu'une réponse soit renvoyée. La communication asynchrone peut être réalisée en utilisant le standard python async / await. Je vais résumer comment l'utiliser.
import asyncio
import aiohttp
def say_something(future): # 5
print(future.result())
return 'hello!'
async def nested(counter):
return counter
async def test():
await asyncio.sleep(2) # 3
return'aaaaaaaaaaaaaaaaaaaa'
async def main():
rep = 0
counter = 0
while True:
if (counter % 100 == 0) and (counter != 0):
http_req = asyncio.create_task(test()) # 2
http_req.add_done_callback(say_something) # 4
counter = 0
print(f'rep: {rep}')
rep += 1
task = asyncio.create_task(nested(counter))
print(await task)
counter += 1
asyncio.run(main()) # 1
Déclaration pour définir la coroutine. Les corroutes sont une forme plus générale de sous-programmes qui peuvent avoir plusieurs points d'entrée. Autrement dit, le processus peut être interrompu et redémarré à partir de cet emplacement.
Une image comme un planificateur de tâches est très bien. En enregistrant un collout pour la boucle d'événement, il s'exécute, s'arrête et traite à nouveau automatiquement.
Les requêtes http n'utilisaient pas la bibliothèque de requêtes, mais utilisaient une bibliothèque appelée aiohttp.
$ pip install aiohttp
Les requêtes HTTP peuvent être enregistrées en tant que collouts sous la forme suivante.
async def process_http_request(data):
async with aiohttp.ClientSession() as session:
async with session.post(URL, json=data) as response:
return await response.text()
Recommended Posts