Python 3-Multi-Prozess-Pool-Methoden sollten imap_unordered verwenden

Es gibt viele Methoden für Multi-Process Pool in Python3 und ich wusste nicht, welche ich verwenden sollte, also habe ich nachgeschlagen.

Kartenfunktion

Die Kartenfunktion wird blockiert, bis alle Ergebnisse verfügbar sind.

Wenn ich den Code ausführe

map.py


from multiprocessing import Pool
from time import sleep
import time

start = time.time()

def do(waitTime):
    print("do waitTime:{}Von Anfang an{}Sekunden sind vergangen".format(waitTime,time.time() - start))
    sleep(waitTime)
    return waitTime
 
if __name__ == '__main__':
    waitTimes = [3,2,1]
    with Pool(10) as p:
        for result in p.map(do,waitTimes):
            print("result waitTime:{}Von Anfang an{}Sekunden sind vergangen".format(result,time.time() - start))

Ergebnis ist

do waitTime:3 0 von Anfang an.035417079925537 11 Sekunden sind vergangen
do waitTime:2 0 von Anfang an.03555130958557129 Sekunden sind vergangen
do waitTime:1 von Anfang an 0.03568387031555176 Sekunden sind vergangen
result waitTime:3 von Anfang an 3.0372514724731445 Sekunden sind vergangen
result waitTime:2 von Anfang an 3.0373241901397705 Sekunden sind vergangen
result waitTime:1 von Anfang an 3.037338972091675 Sekunden vergangen

for result in p.map (do, waitTimes): Der Rückgabewert der Zeile ist vom Typ list ** Die for-Anweisung wird erst ausgeführt, wenn alle Prozesse abgeschlossen sind **

IMAP-Funktion

Die Imap-Funktion ist eine verzögerte Auswertungsversion der Kartenfunktion. Der Rückgabewert der imap-Funktion gibt einen Iterator zurück. Wenn es einen Prozess gibt, dessen Rückgabewert festgelegt ist, kann die for-Anweisung ausgeführt werden, ohne auf den Abschluss anderer Prozesse zu warten. Wenn der erste Prozess jedoch aufgrund der Einschränkung, dass er in derselben Reihenfolge zurückgegeben werden muss, in der er übergeben wurde, nicht beendet wird, wird die for-Anweisung auch dann nicht auf unbestimmte Zeit ausgeführt, wenn eine andere Verarbeitung abgeschlossen ist.

imap.py


from multiprocessing import Pool
from time import sleep
import time

start = time.time()
 
def do(waitTime):
    print("do waitTime:{}Von Anfang an{}Sekunden sind vergangen".format(waitTime,time.time() - start))
    sleep(waitTime)
    return waitTime
 
if __name__ == '__main__':
    waitTimes = [3,2,1]
    with Pool(10) as p:
        for result in p.imap(do,waitTimes):
            print("result waitTime:{}Von Anfang an{}Sekunden sind vergangen".format(result,time.time() - start))
do waitTime:3 0 von Anfang an.03740239143371582 Sekunden sind vergangen
do waitTime:2 0 von Anfang an.03748369216918945 Sekunden sind vergangen
do waitTime:1 von Anfang an 0.0376131534576416 Sekunden sind vergangen
result waitTime:3 von Anfang an 3.041029930114746 Sekunden vergangen
result waitTime:2 von Anfang an 3.041118621826172 Sekunden sind vergangen
result waitTime:1 von Anfang an 3.0411417484283447 Sekunden sind vergangen

imap_unordered Funktion

Es ist dasselbe wie imap (), außer dass die Reihenfolge der vom Iterator zurückgegebenen Ergebnisse als willkürlich angesehen wird.

imap.py


from multiprocessing import Pool
from time import sleep
import time

start = time.time()
 
def do(waitTime):
    print("do waitTime:{}Von Anfang an{}Sekunden sind vergangen".format(waitTime,time.time() - start))
    sleep(waitTime)
    return waitTime
 
if __name__ == '__main__':
    waitTimes = [3,2,1]
    with Pool(10) as p:
        for result in p.imap_unordered(do,waitTimes):
            print("result waitTime:{}Von Anfang an{}Sekunden sind vergangen".format(result,time.time() - start))
do waitTime:3 0 von Anfang an.03511857986450 195 Sekunden vergangen
do waitTime:2 0 von Anfang an.035273075103759766 Sekunden vergangen
do waitTime:1 von Anfang an 0.035429954528808594 Sekunden sind vergangen
result waitTime:1 von Anfang an 1.0369133949279785 Sekunden sind vergangen
result waitTime:2 von Anfang an 2.0377516746520996 Sekunden vergangen
result waitTime:3 von Anfang an 3.038750171661377 Sekunden sind vergangen

Hoppla! Wenn ein Prozess die Verarbeitung abgeschlossen hat, wird er ausgeführt, ohne auf eine andere Verarbeitung zu warten!

Zusammenfassung

Python 3-Multi-Prozess-Pool-Methoden sollten imap_unordered verwenden

Recommended Posts

Python 3-Multi-Prozess-Pool-Methoden sollten imap_unordered verwenden
[Python] Über Multi-Prozess
Sie sollten wissen, ob Sie Python verwenden! 10 nützliche Bibliotheken
Drei Gründe, warum Menschen, die maschinelles Lernen lernen, Python verwenden sollten
Verwenden Sie thingspeak aus Python
Verwenden Sie config.ini mit Python
Verwenden Sie fließend Python
Verwenden Sie Datumsangaben in Python
Bequeme Methoden von Python usw.
Grundmethode der [Python] -Klasse
Verwenden Sie Valgrind mit Python
Verwenden Sie MySQL aus Python
Verwenden Sie Mecab mit Python 3
Verwenden Sie LiquidTap Python Client ③
Verwenden Sie DynamoDB mit Python
Asynchron mit Python verarbeiten
Verwenden Sie Python 3.8 mit Anaconda
Methodische Verwendung im [Python] -Format
Verwenden Sie Python mit Docker
Verwenden Sie MySQL aus Python
Verwenden Sie LiquidTap Python Client ②
Verwenden Sie BigQuery aus Python.
Verwenden Sie den Profiler in Python
Verwenden Sie mecab-ipadic-neologd von Python
Verwenden Sie LiquidTap Python Client ①