verwenden Wenn Array (Daten) von mehr als 10.000, nicht alle Prozesse sind fertig (siehe letzte Zeile drucken ('konkurrieren')). Bei Array bis zu 2000 Elementen funktioniert dieser Code gut. Ich denke, Problem mit Warteschlange, ohne result_queue.put ([i, j]) alle Prozesse ordnungsgemäß abgeschlossen. Kann mir jemand mit diesem Teil des Codes helfen?Prozess wird nicht beendet, wenn ich Queue
def finder(start,end,proc,result_queue,lock):
global data
i=start
while i<=end:
el=data[i]
j=-1
for el1 in data:
j=j+1
s1 = SequenceMatcher(None, el, el1)
s1_val=s1.ratio()
if s1_val>0.9: result_queue.put([i,j])
i=i+1
print('end')
if __name__ == '__main__':
multiprocessing.freeze_support()
result_queue = multiprocessing.Queue()
allProcesses = []
data=r.keys()
print(len(data))
parts=8
part=int(len(data)/parts)
i=0
lock = multiprocessing.Lock()
while i<parts:
p = multiprocessing.Process(target=finder, args=(part*i, part*i+part,i,result_queue,lock))
print('init',part*i, part*i+part,i)
allProcesses.append(p)
p.daemon = True
p.start()
i=i+1
print('started process',i)
i=0
for p in allProcesses:
p.join()
print('complete')
Gibt es einen Unterschied, wenn laufen sehen, ohne 'p.daemon = Wahr '? –
kein Unterschied (((nur 3 von 8 abgeschlossen –
Es kann eine Größenbeschränkung für die Warteschlange geben. Wenn es keinen Verbraucher für die Warteschlange gibt, wird sie voll und 'queue.put()' wird blockiert ] (http://stackoverflow.com/questions/5900985/multiprocessing-queue-maxsize-limit-is-32767) schlägt vor, dass es eine Grenze gibt. –