У меня проблема с 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
Однако это приводит к множеству проблем и ошибок. Я задавался вопросом, не лучше ли я, используя пул процессов. Каким будет правильный способ сделать это?
Однако много раз моя очередь пуста, и она может быть заполнена на 300 элементов за секунду, поэтому я не слишком уверен, как это сделать здесь.