multiprocessing und Process problem
Verfasst: Freitag 17. September 2010, 18:13
Hallo,
ich versuche gerade folgenden Code zum laufen zu bekommen.
Ziel ist es auf 2 Prozessoren je 500 Threads zu starten welche Arbeit erzeugen und je einen der das ganze abarbeiten soll.
Die Arbeit soll in eine globale queue geschrieben werden.
Problem ist jetzt, dass dass die Prozesse einfach durchlaufen und das Programm beendet wird ohne das die benötigte Menge abgearbeitet wurde.
Bashausgabe hierzu:
Desweiteren bin ich auf multiprocessing.Pool in der Doku gestoßen, nur ist dies dort mangelhaft erklärt. Könnte mir das evtl. helfen?
Danke Normann
ich versuche gerade folgenden Code zum laufen zu bekommen.
Code: Alles auswählen
#!/usr/bin/python2.6
from multiprocessing import Process,Queue
from Queue import Empty
from threading import Thread
import time
import random
import string
class Processing:
work_queue = Queue()
stop = False
count = 0
start = time.time()
def pudding(self,id): #zum erzeugen von arbeit
#print 'pudding_start',id
while not self.stop:
text = ''.join(random.choice(string.letters) for i in xrange(8))
#print text, id
self.work_queue.put((text,id))
time.sleep(0.5)
print 'pudding stopping'
def do_work(self,q,j): #zum abarbeiten
print 'do_work_start, queue size: ', q.qsize(), ' prozessorID: ', j
while not self.stop:
if self.count == 10000:
self.stop = True
print time.time()-start, self.count
try:
x = q.get_nowait()
#print x[0],x[1], q.qsize()
self.count += 1
except Empty:
time.sleep(0.1)
print 'do_work stopping', j
def prozessor(self,j):
print 'prozessor', j , 'starten'
arbeit_schaffen = [Thread(target = self.pudding, args=(i,)) for i in xrange(500)]
abarbeiten = Thread(target = self.do_work, args=(self.work_queue,j,))
for p in arbeit_schaffen:
p.start()
abarbeiten.start()
print 'prozessor', j , 'gestartet'
def start(self):
prozessor = [Process(target = self.prozessor, args=(j,) ) for j in range(2)]
for p in prozessor:
p.start()
print 'gestartet'
for p in prozessor:
p.join()
start = time.time()
test= Processing()
test.start()
print time.time() - start
Die Arbeit soll in eine globale queue geschrieben werden.
Problem ist jetzt, dass dass die Prozesse einfach durchlaufen und das Programm beendet wird ohne das die benötigte Menge abgearbeitet wurde.
Bashausgabe hierzu:
Habt ihr eine Idee was ich da vergessen habe?prozessor 0 starten
prozessor 1 starten
gestartet
do_work_start, queue size: 546 prozessorID: 1
prozessor 1 gestartet
do_work_start, queue size: 497 prozessorID: 0
prozessor 0 gestartet
0.771878957748
Desweiteren bin ich auf multiprocessing.Pool in der Doku gestoßen, nur ist dies dort mangelhaft erklärt. Könnte mir das evtl. helfen?
Danke Normann