2 votes

Comment passer l'argument mot-clé à la fonction appelée par l'appel à la carte de concurrent.futures ?

J'ai le code suivant :

from concurrent.futures import ThreadPoolExecutor

def spam(url, hello=None, params=None):
    print(url, hello, params)

urls = [1, 2, 3, 4, 5]
params = [(6, 7), 7, ('a', 1), 9, 'ab']
with ThreadPoolExecutor(5) as executor:
    res = executor.map(spam, urls, params)

Cela s'imprime comme prévu :

1 (6, 7) None
2 7 None
3 ('a', 1) None
4 9 None
5 ab None

Y a-t-il un moyen de dire à la map pour appeler la fonction spam avec un argument mot-clé particulier ? Dans cet exemple, j'aimerais que les valeurs params soient transmises à la fonction hello plutôt que le suivant (qui dans ce cas est params ).

Le cas d'utilisation réel que j'essaie de résoudre est le passage de l'adresse de l'utilisateur à l'adresse de l'utilisateur. params= à une valeur request.get appel pour une URL répétitive.

3voto

Jean-François Fabre Points 94672

Vous pourriez envelopper spam dans un lambda lors de l'exécution de map

res = executor.map(lambda x,y:spam(x,params=y), urls, params)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X