25

私はPythonでこの問題を抱えています:

  • 時々チェックする必要がある URL のキューがあります
  • キューがいっぱいの場合、キュー内の各アイテムを処理する必要があります
  • キュー内の各アイテムは、単一のプロセス (マルチプロセッシング) で処理する必要があります。

これまでのところ、次のように「手動で」これを達成することができました。

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

しかし、それは多くの問題とエラーにつながります。プロセスのプールを使用するのに適していないのではないかと思いました。これを行う正しい方法は何ですか?

ただし、多くの場合、キューは空で、1 秒間に 300 個のアイテムで満たされる可能性があるため、ここでどうすればよいかわかりません。

4

2 に答える 2