Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

1.7K
Views
Cómo usar python para programar tareas en una aplicación Django

Soy nuevo en Django y frameworks web en general. Tengo una aplicación que está configurada y funciona perfectamente bien en mi servidor local.

El programa utiliza la API de Twitter para recopilar un montón de tweets y mostrarlos al usuario. El único problema es que necesito mi programa python que hace que los tweets se ejecuten en segundo plano de vez en cuando.

Aquí es donde tendría sentido usar el módulo de programación, pero una vez que inicio el servidor local, nunca ejecuta las funciones de programación. Intenté leer sobre cronjobs y parece que no puedo hacerlo funcionar. ¿Cómo puedo hacer que Django ejecute un archivo python específico periódicamente?

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Me encontré con una situación similar y tuve mucho éxito con django-apscheduler . Es todo autónomo: se ejecuta con el servidor Django y los trabajos se rastrean en la base de datos Django, por lo que no tiene que configurar ningún trabajo cron externo ni nada para llamar a un script.

A continuación, se muestra una forma básica de comenzar a funcionar rápidamente, pero los enlaces al final de esta publicación tienen mucha más documentación y detalles, así como opciones más avanzadas.

Instale con pip install django-apscheduler luego agréguelo a sus INSTALLED_APPS :

 INSTALLED_APPS = [ ... 'django_apscheduler', ... ]

Una vez instalado, asegúrese de ejecutar makemigrations y migrate en la base de datos.

Cree un paquete de python del scheduler (una carpeta en el directorio de su aplicación llamada scheduler con un __init__.py en blanco). Luego, allí, cree un archivo llamado scheduler.py , que debería verse así:

 from apscheduler.schedulers.background import BackgroundScheduler from django_apscheduler.jobstores import DjangoJobStore, register_events from django.utils import timezone from django_apscheduler.models import DjangoJobExecution import sys # This is the function you want to schedule - add as many as you want and then register them in the start() function below def deactivate_expired_accounts(): today = timezone.now() ... # get accounts, expire them, etc. ... def start(): scheduler = BackgroundScheduler() scheduler.add_jobstore(DjangoJobStore(), "default") # run this job every 24 hours scheduler.add_job(deactivate_expired_accounts, 'interval', hours=24, name='clean_accounts', jobstore='default') register_events(scheduler) scheduler.start() print("Scheduler started...", file=sys.stdout)

En su archivo apps.py (créelo si no existe):

 from django.apps import AppConfig class AppNameConfig(AppConfig): name = 'your_app_name' def ready(self): from scheduler import scheduler scheduler.start()

Una palabra de precaución: cuando use esto con DEBUG = True en su archivo settings.py , ejecute el servidor de desarrollo con el indicador --noreload establecido (es decir python manage.py runserver localhost:8000 --noreload ), de lo contrario, las tareas programadas iniciar y ejecutar dos veces.

Además, django-apscheduler no le permite pasar ningún parámetro a las funciones que están programadas para ejecutarse. Es una limitación, pero nunca he tenido un problema con eso. Puede cargarlos desde alguna fuente externa, como la base de datos Django, si realmente lo necesita.

Puede usar todas las bibliotecas, paquetes y funciones estándar de Django dentro de las tareas apscheduler (funciones). Por ejemplo, para consultar modelos, llamar a API externas, analizar respuestas/datos, etc., etc. Está perfectamente integrado.

Algunos enlaces adicionales:

  • Repositorio de proyectos: https://github.com/jarekwg/django-apscheduler
  • Más documentación: https://medium.com/@mrgrantanderson/replacing-cron-and-running-background-tasks-in-django-using-apscheduler-and-django-apscheduler-d562646c062e
over 4 years ago · Santiago Trujillo Report

0

Otra biblioteca que puedes usar es django-q

Django Q es una cola de tareas, programador y aplicación de trabajo nativa de Django que utiliza el multiprocesamiento de Python. 1

Al igual que django-appscheduler , puede ejecutar y rastrear trabajos usando la base de datos a la que está conectado Django. O bien, puede utilizar corredores completos como Reddis.

El único problema es que necesito mi programa python que hace que los tweets se ejecuten en segundo plano de vez en cuando.

Eso suena como un planificador. (Django-q también tiene una función de tareas, que puede ser activada por eventos en lugar de ejecutarse según un cronograma. El programador simplemente se encuentra encima de la función de tareas y activa tareas en un cronograma definido).

Hay tres partes en esto con django-q:

  1. Instale Django-q y configúrelo;
  2. Defina una función de tarea (o un conjunto de funciones) que desee para obtener los tweets;
  3. Defina un cronograma que ejecute las tareas;
  4. Ejecute el clúster django-q que procesará la programación y las tareas.

Instalar django-q

 pip install django-q

Configúrelo como una aplicación instalada en Django settings.py (agréguelo a la lista de aplicaciones instaladas):

 INSTALLED_APPS = [ ... 'django_q', ... ]

Luego necesita su propia configuración settings.py (esta es una configuración para usar la base de datos como intermediario en lugar de reddis o algo externo a Django).

 # Settings for Django-Q # https://mattsegal.dev/simple-scheduled-tasks.html Q_CLUSTER = { 'orm': 'default', # should use django's ORM and database as a broker. 'workers': 4, 'timeout': 30, 'retry': 60, 'queue_limit': 50, 'bulk': 10, }

Luego deberá ejecutar migraciones en la base de datos para crear las tablas que usa django-q:

 python manage.py migrate

(Esto creará un montón de tablas relacionadas con el cronograma y la tarea en la base de datos. Se pueden ver y manipular a través del panel de administración de Django).

Definir una función de tarea

Luego cree un nuevo archivo para las tareas que desea ejecutar:

 # app/tasks.py def fetch_tweets(): pass # do whatever logic you want here

Definir un programa de tareas

Necesitamos agregar a la base de datos el cronograma para ejecutar las tareas.

 python manage.py shell from django_q.models import Schedule Schedule.objects.create( func='app.tasks.fetch_tweets', # module and func to run minutes=5, # run every 5 minutes repeats=-1 # keep repeating, repeat forever )

No tienes que hacer esto a través del caparazón. Puede hacer esto en un módulo de código python, etc. Pero probablemente solo necesite crear el cronograma una vez.

Ejecutar el clúster

Una vez que haya terminado, debe ejecutar el clúster que procesará la programación. De lo contrario, sin ejecutar el clúster, la programación y las tareas nunca se procesarán. La llamada a qcluster es una llamada de bloqueo. Entonces, normalmente desea ejecutarlo en una ventana o proceso separado del proceso del servidor Django.

 python manage.py qcluster

Cuando se ejecuta, verá un resultado como:

 09:33:00 [Q] INFO Q Cluster fruit-november-wisconsin-hawaii starting. 09:33:00 [Q] INFO Process-1:1 ready for work at 11 09:33:00 [Q] INFO Process-1:2 ready for work at 12 09:33:00 [Q] INFO Process-1:3 ready for work at 13 09:33:00 [Q] INFO Process-1:4 ready for work at 14 09:33:00 [Q] INFO Process-1:5 monitoring at 15 09:33:00 [Q] INFO Process-1 guarding cluster fruit-november-wisconsin-hawaii 09:33:00 [Q] INFO Q Cluster fruit-november-wisconsin-hawaii running.

También hay documentación de ejemplo que es bastante útil si desea ver cómo vincular tareas a informes, correos electrónicos, señales, etc.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!