Die Besetzung einer Warteschlange und Verwaltung von multiprocessing python

Bin ich mit diesem problem in python:

  • Ich habe eine Warteschlange von URLs, die ich brauche, um zu überprüfen, von Zeit zu Zeit
  • wenn die Warteschlange voll ist, ich brauche, um Verfahren jedes Element in der queue
  • Jedes Element in der Warteschlange verarbeitet werden müssen, von einem einzigen Prozess (multiprocessing)

Bisher habe ich es geschafft, dies zu erreichen "manuell" wie folgt:

while 1:
        self.updateQueue()

        while not self.mainUrlQueue.empty():
            domain = self.mainUrlQueue.get()

            # if we didn't launched any process yet, we need to do so
            if len(self.jobs) < maxprocess:
                self.startJob(domain)
                #time.sleep(1)
            else:
                # If we already have process started we need to clear the old process in our pool and start new ones
                jobdone = 0

                # We circle through each of the process, until we find one free ; only then leave the loop 
                while jobdone == 0:
                    for p in self.jobs :
                        #print "entering loop"
                        # if the process finished
                        if not p.is_alive() and jobdone == 0:
                            #print str(p.pid) + " job dead, starting new one"
                            self.jobs.remove(p)
                            self.startJob(domain)
                            jobdone = 1

Aber das führt zu Tonnen von Problemen und Fehlern. Ich fragte mich, ob ich nicht besser geeignet, die mit einem Pool von Prozess. Was wäre der richtige Weg, dies zu tun?

Jedoch eine Menge Zeit, meine queue ist leer und kann gefüllt werden, indem 300 items in eine zweite, so bin ich mir auch nicht sicher, wie die Dinge zu tun hier.

InformationsquelleAutor Tibo | 2013-06-21

Schreibe einen Kommentar