2016-07-31 12 views
-1

Ich habe kein Problem mit concurrent.futures, wenn alle meine Prozesse von verschiedenen Funktionen gestartet werden. Aber wenn ich die gleiche Funktion mit verschiedenen Parametern aufrufen möchte, kann ich die Syntax nicht richtig finden. Dies ist, was ich so weit gekommen, aber es funktioniert nicht:Python concurrent.futures Aufruf der gleichen Funktion zweimal

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) 

Dies ist der Fehler aber ich es nicht verstehen: Ich grok

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

Eigentlich nicht wirklich, warum seine komplizierte überhaupt. Sollte ich das nicht einfach können:

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

Aber das funktioniert nicht. Das Programm hängt beim zweiten Senden. Warum? (Korrigieren Sie mich, wenn ich falsch liege)

Antwort

0

Es scheint, dass serial_cross_over 4 Argumente übernimmt und Sie sie nicht bieten, wenn .map so, vielleicht einen Blick auf diese Antwort nehmen: 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 

Was warum funktioniert executor.submit nicht wie erwartet, kann ich ohne weitere details nicht sagen. Hast du es schon versucht ?:

with ThreadPoolExecutor(max_workers=1) as executor: 
    future = executor.submit(some_function, parameter1) 
    print(future.result())