Python Language
multiprocessing
Ricerca…
Esecuzione di due processi semplici
Un semplice esempio di utilizzo di più processi sarebbe costituito da due processi (operatori) eseguiti separatamente. Nell'esempio seguente, vengono avviati due processi:
-
countUp()
conta 1 su, ogni secondo. -
countDown()
conta 1 down, ogni secondo.
import multiprocessing
import time
from random import randint
def countUp():
i = 0
while i <= 3:
print('Up:\t{}'.format(i))
time.sleep(randint(1, 3)) # sleep 1, 2 or 3 seconds
i += 1
def countDown():
i = 3
while i >= 0:
print('Down:\t{}'.format(i))
time.sleep(randint(1, 3)) # sleep 1, 2 or 3 seconds
i -= 1
if __name__ == '__main__':
# Initiate the workers.
workerUp = multiprocessing.Process(target=countUp)
workerDown = multiprocessing.Process(target=countDown)
# Start the workers.
workerUp.start()
workerDown.start()
# Join the workers. This will block in the main (parent) process
# until the workers are complete.
workerUp.join()
workerDown.join()
L'output è il seguente:
Up: 0
Down: 3
Up: 1
Up: 2
Down: 2
Up: 3
Down: 1
Down: 0
Utilizzando Pool e Mappa
from multiprocessing import Pool
def cube(x):
return x ** 3
if __name__ == "__main__":
pool = Pool(5)
result = pool.map(cube, [0, 1, 2, 3])
Pool
è una classe che gestisce più Workers
(processi) dietro le quinte e consente a te, il programmatore, di usarli.
Pool(5)
crea un nuovo pool con 5 processi e pool.map
funziona come la mappa ma utilizza più processi (la quantità definita durante la creazione del pool).
Risultati simili possono essere ottenuti usando map_async
, apply
e apply_async
che possono essere trovati nella documentazione .
Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow