#python #python-2.7 #queue #rabbitmq
#python #python-2.7 #очередь #rabbitmq
Вопрос:
Я использую RabbitMQ для своих пауков, каждый паук отправляет данные получателю.
Я запустил демон receiver.py
as с помощью этой команды : daemon python /receiver.py
Когда я запускаю несколько экземпляров spider, у меня возникает ощущение, что receiver.py
для очереди «истекло» больше одного экземпляра.
Что не так с моим кодом?
Отправитель работает следующим образом (Scrapy spider) :
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
channel.queue_declare(queue='expired')
def parse_items(self, response):
for link in LxmlLinkExtractor(allow=(), deny=self.allowed_domains, canonicalize=False).extract_links(response):
# self.logger.info('[{}] Added to the List'.format(domain))
channel.basic_publish(exchange='', routing_key='expired', body=domain, )
self.domains.append(domain)
Получатель делает это :
class Threaded_worker(threading.Thread):
def callback(self, ch, method, properties, domain):
url = 'http://www.checkdomain.com/cgi-bin/checkdomain.pl?domain=' domain
self.parse_checkdomain(url, domain)
time.sleep(domain.count('.'))
ch.basic_ack(delivery_tag=method.delivery_tag)
def __init__(self):
threading.Thread.__init__(self)
self.connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
self.channel = self.connection.channel()
self.channel.queue_declare(queue='expired')
self.channel.basic_qos(prefetch_count=1)
self.channel.basic_consume(self.callback, queue='expired')
def run(self):
logging.warning('Worker Start !')
self.channel.start_consuming()
for _ in range(15):
td = Threaded_worker()
td.setDaemon(False)
td.start()
Кстати, у меня есть еще один небольшой вопрос: если мой receiver.py
не запускается, все данные по-прежнему сохраняются в очереди?
Комментарии:
1. вы нашли ответ?
2. не могли бы вы поделиться этим, пожалуйста? У меня похожая проблема
3. @Kostanos В чем именно ваша проблема?
4. Мой рабочий выглядит так: pastebin.com/XFJQ20x4