Hier ist eine weitere Möglichkeit, die IMHO einfacher und eleganter ist als alle anderen Antworten.
Dieses Programm hat eine Funktion, die zwei Parameter annimmt, sie ausgibt und auch die Summe ausgibt:
import multiprocessing
def main():
with multiprocessing.Pool(10) as pool:
params = [ (2, 2), (3, 3), (4, 4) ]
pool.starmap(printSum, params)
# end with
# end function
def printSum(num1, num2):
mySum = num1 + num2
print('num1 = ' + str(num1) + ', num2 = ' + str(num2) + ', sum = ' + str(mySum))
# end function
if __name__ == '__main__':
main()
Ausgabe ist:
num1 = 2, num2 = 2, sum = 4
num1 = 3, num2 = 3, sum = 6
num1 = 4, num2 = 4, sum = 8
Weitere Informationen finden Sie in den Python-Dokumenten:
https://docs.python.org/3/library/multiprocessing.html#module-multiprocessing.pool
Informieren Sie sich insbesondere über die starmap
Funktion.
Ich benutze Python 3.6, ich bin nicht sicher, ob dies mit älteren Python-Versionen funktionieren wird
Ich weiß nicht, warum es in den Unterlagen kein einfaches Beispiel wie dieses gibt.
12 Stimmen
Zu meiner Überraschung konnte ich weder die
partial
nochlambda
dies tun. Ich denke, es hat mit der seltsamen Art und Weise zu tun, wie Funktionen an die Unterprozesse übergeben werden (überpickle
).15 Stimmen
@senderle: Dies ist ein Fehler in Python 2.6, der aber mit 2.7 behoben wurde: bugs.python.org/issue5228
3 Stimmen
Ersetzen Sie einfach
pool.map(harvester(text,case),case, 1)
von:pool.apply_async(harvester(text,case),case, 1)
5 Stimmen
@Syrtis_Major , bitte editieren Sie keine OP-Fragen, die Antworten, die bereits gegeben wurden, effektiv verdrehen. Hinzufügen von
return
àharvester()
hat die Antwort von @senderie als ungenau bezeichnet. Das ist für künftige Leser nicht hilfreich.3 Stimmen
Ich würde sagen, eine einfache Lösung wäre, alle Args in ein Tupel zu packen und es in der ausführenden Funktion zu entpacken. Ich habe dies getan, wenn ich komplizierte mehrere Args an eine Funktion senden musste, die von einem Pool von Prozessen ausgeführt wird.
0 Stimmen
Vielleicht gibt es eine gewisse Komplexität, die ich für diesen speziellen Anwendungsfall vermisse, aber ein Teil funktioniert für meinen ähnlichen Anwendungsfall und ist sehr prägnant und einfach zu verwenden. python.omics.wiki/multiprocessing_map/