2017-12-31 166 views
0

Ich bin neu in Python und wirklich versucht, die Dinge zu lernen, wie ich gehen. Ich habe ein Python-Skript, das Daten von verschiedenen Websites bezieht und über eine Website der Öffentlichkeit anzeigt. Ich verwende Django mit Heroku-Distribution.Sellerie daemonization mit Django

Ich brauche automatisch meine Skripte am Morgen laufen die Informationen zu aktualisieren. Ich sah, dass Sellerie die beste Option dafür war. Ich habe jetzt ein funktionierendes Beispiel für Sellerie und glaube, dass ich es richtig mit Django konfiguriert habe. Ich muss aber auch einen Prozess namens Daemonization durchlaufen: http://docs.celeryproject.org/en/latest/userguide/daemonizing.html damit meine Sellerie-Arbeiter im Hintergrund arbeiten können. Diese

ist, wo ich ratlos bin, und kann keine Schritt-für-Schritt-Anleitungen für diese finden. Ich glaube, ich alle diese Datei benötigen für die Dinge zu funktionieren:

/etc/init.d/celeryd 
/etc/defaults/celery 
/etc/default/celerybeat 
/project/celery.py 
/project/__init__.py 

ich alle diese Dateien im Stammverzeichnis beginnen, wo manage.py befindet Ich glaube, ich habe die celery.py und __init__.py Dateien korrekt konfiguriert ist. Hier sind sie: celery.py

from __future__ import absolute_import, unicode_literals 
import os 
from celery import Celery 


# set the default Django settings module for the 'celery' program. 
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings') 

app = Celery('project') 

# Using a string here means the worker doesn't have to serialize 
# the configuration object to child processes. 
# - namespace='CELERY' means all celery-related configuration keys 
# should have a `CELERY_` prefix. 
app.config_from_object('django.conf:settings', namespace='CELERY') 

# Load task modules from all registered Django app configs. 
app.autodiscover_tasks() 


@app.task(bind=True) 
def debug_task(self): 
    print('Request: {0!r}'.format(self.request)) 

und init.py:

from __future__ import absolute_import, unicode_literals 

# This will make sure the app is always imported when 
# Django starts so that shared_task will use this app. 
from .celery import app as celery_app 

__all__ = ['celery_app'] 

Ich bin nicht sicher, wie man richtig die beiden anderen Dateien konfigurieren. Hier ist, was ich habe für celeryd:

CELERYD_NODES=4 
CELERY_BIN="project/celery" 
CELERY_APP="project" 
CELERYD_CHDIR="project/" 

# Extra command-line arguments to the worker 
#CELERYD_OPTS="--time-limit=300 --concurrency=8" 
# Configure node-specific settings by appending node name to arguments: 
#CELERYD_OPTS="--time-limit=300 -c 8 -c:worker2 4 -c:worker3 2 -Ofair:worker1" 

# Set logging level to DEBUG 
#CELERYD_LOG_LEVEL="DEBUG" 

# %n will be replaced with the first part of the nodename. 
CELERYD_LOG_FILE="/var/log/celery/%n%I.log" 
CELERYD_PID_FILE="/var/run/celery/%n.pid" 
CELERYD_USER="celery" 
CELERYD_GROUP="celery" 
CELERY_CREATE_DIRS=1 

und hier ist die celerybeat Datei:

# Absolute or relative path to the 'celery' command: 
CELERY_BIN="project/celery" 
#CELERY_BIN="/virtualenvs/def/bin/celery" 

# App instance to use 
# comment out this line if you don't use an app 
CELERY_APP="project" 
# or fully qualified: 
#CELERY_APP="proj.tasks:app" 

# Where to chdir at start. 
CELERYBEAT_CHDIR="/project/" 

# Extra arguments to celerybeat 
#CELERYBEAT_OPTS="--schedule=/var/run/celery/celerybeat-schedule" 

Ich bin auch nicht sicher, wo genau ich soll die folgende Zeile setzen:

export DJANGO_SETTINGS_MODULE="settings" 

ich bin mir nicht ganz sicher, was in /etc/defaults/celery geht oder wenn ich brauche es auch. Ich glaube, ich muss es auch so machen, dass meine Aufgaben-Datei hat die Hauptdatei für CELERY_BEAT Optionen irgendwie. Noch nicht so weit gekommen, aber ich sollte die Option crontab hier richtig stellen können?

Antwort

0

Sie verwenden Heroku, so dass Sie keine davon tun müssen. Setzen Sie einfach den Sellerie-Befehl in Ihr Procfile.

+0

Vielen Dank. Dachte nicht, Heroku auf Kompatibilität zu überprüfen. – juju

Verwandte Themen