Ho una funzione get_data(request)
che richiede alcuni dati a un server. Ogni volta che viene chiamata questa funzione, richiede i dati a un server diverso. Tutti dovrebbero restituire la stessa risposta.Come eseguire una funzione più volte in modo asincrono e ottenere il primo risultato
Vorrei ricevere la risposta il prima possibile. Devo creare una funzione che chiama più volte get_data
e restituisce la prima risposta che ottiene.
EDIT:
mi è venuta l'idea di usare multithreading.Pipe(), ma ho la sensazione che questo è un pessimo modo per risolverlo, cosa ne pensi ?:
def get_data(request, pipe):
data = # makes the request to a server, this can take a random amount of time
pipe.send(data)
def multiple_requests(request, num_servers):
my_pipe, his_pipe = multithreading.Pipe()
for i in range(num_servers):
Thread(target = get_data, args = (request,his_pipe)).start()
return my_pipe.recv()
multiple_requests("the_request_string", 6)
Penso che questo sia un pessimo modo di farlo perché stai passando lo stesso pipe a tutti i thread, e non lo so davvero ma immagino che debba essere molto pericoloso.
il modo più semplice che posso pensare è di usare il primo valore prodotto da python 3 ['concurrent.futures.as_completed'] (https://docs.python.org/3.2/library/concurrent.futures.html # concurrent.futures.as_completed) – roippi
Probabilmente è possibile utilizzare le code di sicurezza del thread python per restituire il risultato dell'esecuzione del thread. È un modo sicuro e non bloccante. Si prega di dare un'occhiata a [link] (https://docs.python.org/2/library/queue.html) – Andy
@roippi potrei avere un semplice esempio di come usare quella funzione? Sto avendo difficoltà a cercare di capire come funziona ... – Jorky10