Wenn eine große Anzahl von Aufgaben (mit großen Parametern) mit Pool.apply_async ausgeführt wird, werden die Prozesse zugeordnet und in einen Wartezustand versetzt, und es gibt keine Begrenzung für die Anzahl der wartenden Prozesse. Dies kann unter durch den Verzehr der gesamten Speichers, wie im Beispiel am Ende:Python Multiprocessing: Wie kann die Anzahl der wartenden Prozesse begrenzt werden?
import multiprocessing
import numpy as np
def f(a,b):
return np.linalg.solve(a,b)
def test():
p = multiprocessing.Pool()
for _ in range(1000):
p.apply_async(f, (np.random.rand(1000,1000),np.random.rand(1000)))
p.close()
p.join()
if __name__ == '__main__':
test()
ich für eine Art und Weise bin auf der Suche die Warteschlange zu begrenzen, so dass es nur eine begrenzte Anzahl von wartenden Prozessen ist, und Pool.apply_async ist blockiert, während die Warteschlange voll ist.
Nizza Beispiel (+1). – mgilson