Python Multiprocessing> = 125 Liste wird nie beendet
Ich versuche, diese Mehrfachverarbeitung zu implementierenTutorial für meine eigenen Zwecke. Zuerst dachte ich, dass es nicht gut skaliert, aber als ich ein reproduzierbares Beispiel machte, stellte ich fest, dass, wenn die Liste der Elemente 124 überschreitet, es nie eine Antwort zu geben scheint. Beimx = 124
Es läuft in 0,4 Sekunden, aber wenn ich es aufx = 125
es hört nie auf. Ich verwende Python 2.7 unter Windows 7.
from multiprocessing import Lock, Process, Queue, current_process
import time
class Testclass(object):
def __init__(self, x):
self.x = x
def toyfunction(testclass):
testclass.product = testclass.x * testclass.x
return testclass
def worker(work_queue, done_queue):
try:
for testclass in iter(work_queue.get, 'STOP'):
print(testclass.counter)
newtestclass = toyfunction(testclass)
done_queue.put(newtestclass)
except:
print('error')
return True
def main(x):
counter = 1
database = []
while counter <= x:
database.append(Testclass(10))
counter += 1
print(counter)
workers = 8
work_queue = Queue()
done_queue = Queue()
processes = []
start = time.clock()
counter = 1
for testclass in database:
testclass.counter = counter
work_queue.put(testclass)
counter += 1
print(counter)
print('items loaded')
for w in range(workers):
p = Process(target=worker, args=(work_queue, done_queue))
p.start()
processes.append(p)
work_queue.put('STOP')
for p in processes:
p.join()
done_queue.put('STOP')
newdatabase = []
for testclass in iter(done_queue.get, 'STOP'):
newdatabase.append(testclass)
print(time.clock()-start)
print("Done")
return(newdatabase)
if __name__ == '__main__':
database = main(124)
database2 = main(125)