erzeugen Ich richte einen RabbitMQ-Server mit Docker wie unten. Konfigurieren Sie dann den Sellerie, um ihn als Makler zu verwenden.warum rabbitmq viele Idx-Datei in der Warteschlange Verzeichnis
rabbit:
hostname: rabbit
image: rabbitmq:latest
environment:
- RABBITMQ_DEFAULT_USER=admin
- RABBITMQ_DEFAULT_PASS=mypass
ports:
- "5673:5672"
worker:
build:
context: .
dockerfile: dockerfile
volumes:
- .:/app
links:
- rabbit
depends_on:
- rabbit
Und die Sellerie-Konfiguration ist:
from __future__ import absolute_import
from celery import Celery
app = Celery('test_celery',broker='amqp://admin:[email protected]:5673',backend='rpc://',include=['test_celery.tasks'])
Run_tasks Code:
from .tasks import longtime_add
import time
if __name__ == '__main__':
url = ['http://example1.com' , 'http://example2.com' , 'http://example3.com' , 'http://example4.com' , 'http://example5.com' , 'http://example6.com' , 'http://example7.com' , 'http://example8.com'] # change them to your ur list.
for i in url:
result = longtime_add.delay(i)
print 'Task result:',result.result
Aufgaben Code
from __future__ import absolute_import
from test_celery.celery import app
import time,requests
from pymongo import MongoClient
client = MongoClient('10.1.1.234', 27018) # change the ip and port to your mongo database's
db = client.mongodb_test
collection = db.celery_test
post = db.test
@app.task(bind=True,default_retry_delay=10) # set a retry delay, 10 equal to 10s
def longtime_add(self,i):
try:
r = requests.get(i)
if some conditions happend:
longtime_add.delay(i)
elif some other conditions happened:
post.insert({'status':r.status_code,"creat_time":time.time()})
except Exception as exc:
raise self.retry(exc=exc)
Der run_taks Code eine Liste von URL generieren und senden sie dann zu RabbitMQ Aufgaben werden sie konsumieren und prüfen, ob bestimmte Bedingungen erfüllt sind oder nicht, falls dies passiert, senden Sie das Ergebnis erneut an Rabbtmq, andernfalls speichern Sie die Daten in der Datenbank.
Die Frage hier. Wenn Tasks für eine lange Zeit laufen, 24 Stunden oder sogar lange, werden viele IDX-Dateien im Verzeichnis "mnesia/rabbit @ rabbit/queues" von RabbitMQ erzeugt. Die Gesamtgröße beträgt 40G.
Also die Frage hier, wie man diese große Datei automatisch erzeugt oder in einer kleinen Größe halten?
Die Funktion, die ich oben verwendet habe, ist die richtige Art, Aufgaben zu konsumieren? Oder wie korrigiere ich den Code? –
Siehe http://www.rabbitmq.com/getstarted.html und http://www.rabbitmq.com/tutorials/amqp-concepts.html, wenn der Unterschied nicht klar ist. Ich vermute, dass es einen Sellerie-Arbeiter gibt, der Nachrichten in die Warteschleife stellt, aber nie konsumiert wird. Es sollte ziemlich einfach in der Verwaltungsoberfläche zu sehen sein. –