でマルチプロセッシング管理:キューを充填し、私はpythonでこの問題を抱えているの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個のアイテムで塗りつぶすことができるので、ここでどのように行うかについてはあまりよく分かりません。
これはPython 2.7.4のウィンドウでは機能しません。if __name__ = '__main__' 3番目のパラメータとしてthe_queueをmultiprocessing.Pool関数に渡す必要があります。そうでなければ、worker_mainはデータを受け取りません。 – jhexp
このコードを動作させる方法にも興味があります。私はそれを実行すると、それは実行されますが、おそらくworker_mainがデータを受け取らないため、何も印刷しません。しかし、私がthe_queueを3番目のパラメータとして渡すと、TypeErrorが返されます。* worker_main()の後の引数*はシーケンスでなければなりません。 – ziky90
@ ziky90おそらく '(queue、)'に昏睡を忘れました。コードを編集して、可能なエラーの原因を指摘するコメントを追加しました。 –