2016-07-31 4 views
-1

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

tasks = ((serial_port_local, serial_options_local, serial_port_remote, serial_options_remote, "local"), 
(serial_port_remote, serial_options_remote, serial_port_local, serial_options_local, "remote")) 

for task in zip(tasks, executor.map(serial_cross_over, tasks)): 
    print (task) 

Это ошибка, но я не обращал внимания на это:

TypeError: serial_cross_over() missing 4 required positional arguments: 'receive_serial_options', 'send_serial_port', 'send_serial_options', and 'source' 

На самом деле я не обращал внимания, почему его сложный вообще. Не следует делать только:

executor.submit(some_function(parameter1)) 
executor.submit(some_function(parameter2)) 

Но это не работает. Программа зависает во второй submit. Зачем?

ответ

0

Кажется, что serial_cross_over принимает 4 аргумента (поправьте меня, если я ошибаюсь), и вы не предоставите их, когда .map так, может быть, посмотрите на этот ответ: Pass multiple parameters to concurrent.futures.Executor.map?

tasks = ((serial_port_local, serial_options_local, serial_port_remote, serial_options_remote, "local"), (serial_port_remote, serial_options_remote, serial_port_local, serial_options_local, "remote")) 

for task in zip(executor.map(lambda p: f(*p), tasks)): 
    pass 

Что касается почему исполнитель не работает, как ожидалось, я не могу сказать без дальнейших подробностей. Вы так пробовали ?:

with ThreadPoolExecutor(max_workers=1) as executor: 
    future = executor.submit(some_function, parameter1) 
    print(future.result()) 
Смежные вопросы