Je veux interroger une API (qui prend du temps) avec beaucoup d'éléments (~ 100) mais pas tous en même temps. Au lieu de cela, je veux un peu de temps entre les requêtes.Céleri + Python: file d'attente des tâches qui demandent beaucoup de temps dans une autre tâche
Ce que j'ai actuellement est une tâche qui est exécuté de manière asynchrone et itère sur les requêtes et après chaque itération attend un certain temps:
@shared_task
def query_api_multiple(values):
delay_between_queries = 1
query_results = []
for value in values:
time.sleep(delay_between_queries)
response = query_api(value)
if response['result']:
query_results.append(response)
return query_results
Ma question est, lorsque plusieurs de ces demandes arrivent, sera la deuxième la requête est exécutée après la fin du premier ou pendant que le premier est toujours en cours d'exécution? Et quand ils ne sont pas exécutés en même temps, comment puis-je y parvenir?
Vous devez utiliser ETA - Planification d'une tâche pour plus tard, pour le faire de manière asynchrone en utilisant ETA (heure d'arrivée estimée) comme: later = now + timedelta (hours = 1) access_awful_system.apply_async ((object_id), eta = later) [référence] (https://fernandofreitasalves.com/using-celery-with-multiple-queues-retries-and-scheduled-tasks/) ETA. –