2017-02-02 2 views
1

У меня есть следующий код:Как передать аргумент ключевое слово, чтобы функция, вызываемая concurrent.futures карте вызова

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) 

Это ожидаемо печатает:

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

Есть ли способ сказать функцию map для вызова spam с определенным аргументом ключевого слова? В этом примере я хотел бы, чтобы параметры params передавались в аргумент hello, а не в следующую строку (которая в этом случае равна params).

Реальный реальный случай, который я пытаюсь решить, передает значение params= в request.get для повторного URL.

ответ

2

Вы можете обернуть spam в лямбда при выполнении map

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

Brilliant, спасибо! :-) – mart1n

Смежные вопросы