Как написать скрипт python для автоматического запуска в 23:30 каждый день? [Дубликат]

def ncustom_zip(seq1,seq2,max_length):
        length= len(seq1) if len(seq1)>len(seq2) else len(seq2) if max_length else len(seq1) if len(seq1)<len(seq2) else len(seq2)
        for i in range(length):
                x= seq1[i] if len(seq1)>i else None  
                y= seq2[i] if len(seq2)>i else None
                yield x,y


l=[12,2,3,9]
p=[89,8,92,5,7]

for i,j in ncustom_zip(l,p,True):
        print i,j
for i,j in ncustom_zip(l,p,False):
        print i,j
423
задан WhiteKnight 3 May 2012 в 19:35
поделиться

21 ответ

Одно из решений, которое я использовал, состоит в том, чтобы сделать это:

1) Создать пользовательскую команду управления , например.

python manage.py my_cool_command

2) Используйте cron (в Linux) или at (в Windows) для запуска моей команды в требуемые моменты времени.

Это простое решение, которое не требует установки тяжелого стека AMQP. Однако есть хорошие преимущества в использовании чего-то типа сельдерея, упомянутого в других ответах. В частности, с Celery неплохо не распространять логику приложения в файлы crontab. Однако решение cron работает довольно хорошо для приложения малого и среднего размера и где вы не хотите много внешних зависимостей.

EDIT:

В более поздней версии окон at устарела для Windows 8, Server 2012 и выше. Вы можете использовать schtasks.exe для такого же использования.

307
ответ дан Manish Gupta 3 September 2018 в 12:50
поделиться

Хотя он не является частью Django, Airflow - это более новый проект (начиная с 2016 года), который полезен для управления задачами.

Airflow - это система автоматизации и планирования рабочего процесса, которая может использоваться для создания и управления конвейерами данных. Веб-интерфейс предоставляет разработчику ряд опций для управления и просмотра этих конвейеров.

Airflow написан на Python и построен с использованием Flask.

Airflow был создан Maxime Beauchemin at Airbnb и открылся весной 2015 года. Он присоединился к инкубационной программе Apache Software Foundation зимой 2016 года. Здесь представлена ​​страница проекта Git и некоторая дополнительная информация .

6
ответ дан Alexander 3 September 2018 в 12:50
поделиться

Интересное новое подключаемое приложение Django: django-chronograph

Вам нужно добавить только одну запись cron, которая действует как таймер, и у вас очень приятный интерфейс администратора Django сценарии для запуска.

22
ответ дан Austin Adams 3 September 2018 в 12:50
поделиться

У нас есть open-source, что я считаю структурированным приложением. что решение Брайана выше намека.

https://github.com/tivix/django-cron

Он поставляется с одной командой управления:

./manage.py runcrons

Это делает работу. Каждый cron моделируется как класс (так что все OO), и каждый cron работает на другой частоте, и мы убеждаемся, что тот же тип cron не работает параллельно (в случае, если самим кронам требуется больше времени для работы, чем их частота!)

Спасибо!

43
ответ дан chachra 3 September 2018 в 12:50
поделиться

Лично я использую cron, но интересны расписания работы частей django-extensions .

8
ответ дан chhantyal 3 September 2018 в 12:50
поделиться

Более современным решением (по сравнению с Celery) является Django Q: https://django-q.readthedocs.io/en/latest/index.html

It имеет отличную документацию и легко разбирается. Отсутствует поддержка Windows, поскольку Windows не поддерживает процесс форсинга. Но он отлично работает, если вы создаете среду разработки с помощью подсистемы Windows для Linux.

1
ответ дан devdrc 3 September 2018 в 12:50
поделиться

Сегодня у меня было что-то похожее на вашу проблему.

Я не хотел, чтобы он обрабатывался сервером trhough cron (и большинство из них были просто помощниками cron в конце).

Итак, я создал модуль планирования и привязал его к init.

Это не лучший подход, но он помогает мне иметь весь код в одном месте и с его исполнением связанные с основным приложением.

2
ответ дан Fabricio Buzeto 3 September 2018 в 12:50
поделиться

Предложение Брайана Нила о выполнении команд управления через cron работает хорошо, но если вы ищете что-то немного более надежное (но не так тщательно, как Celery), я бы посмотрел в библиотеку, например Kronos :

# app/cron.py

import kronos

@kronos.register('0 * * * *')
def task():
    pass
9
ответ дан Johannes Gorset 3 September 2018 в 12:50
поделиться

Я не уверен, что это будет полезно для всех, так как я должен был предоставить другим пользователям системы расписание заданий, не предоставляя им доступ к фактическому планировщику планировщика (Windows), я создал это многоразовое приложение.

Обратите внимание, что пользователи имеют доступ к одной общей папке на сервере, где они могут создать требуемый файл command / task / .bat. Эта задача затем может быть запланирована с помощью этого приложения.

Имя приложения - Django_Windows_Scheduler

ScreenShot:

1
ответ дан just10minutes 3 September 2018 в 12:50
поделиться

В верхней части вашего файла cron.py введите следующее:

#!/usr/bin/python
import os, sys
sys.path.append('/path/to/') # the parent directory of the project
sys.path.append('/path/to/project') # these lines only needed if not on path
os.environ['DJANGO_SETTINGS_MODULE'] = 'myproj.settings'

# imports and code below
6
ответ дан Matt McCormick 3 September 2018 в 12:50
поделиться

Я просто подумал об этом довольно простом решении:

  1. Определить функцию представления do_work (req, param), как и с любым другим видом, с отображением URL-адреса, возвратом HttpResponse и т. д. .
  2. Настройте задание cron с вашими настройками времени (или с помощью AT или запланированных задач в Windows), в котором выполняется завиток http: // localhost / your / mapped / url? param = value .

Вы можете добавлять параметры, но просто добавлять параметры к URL.

Расскажите, что вы думаете.

[Обновить] Я теперь использую команду runjob из django-extensions вместо curl.

Мой cron выглядит примерно так:

@hourly python /path/to/project/manage.py runjobs hourly

... и так и ежедневно, ежемесячно и т. д. ». Вы также можете настроить его для выполнения определенного задания.

Я считаю его более управляемым и более чистым. Не требует сопоставления URL-адреса для представления. Просто определите свой класс работы и crontab, и вы настроены.

5
ответ дан Michael 3 September 2018 в 12:50
поделиться

Да, метод выше настолько велик. И я попробовал некоторые из них. Наконец, я нашел такой метод:

    from threading import Timer

    def sync():

        do something...

        sync_timer = Timer(self.interval, sync, ())
        sync_timer.start()

Точно так же, как рекурсивный.

Хорошо, я надеюсь, что этот метод может удовлетворить ваши требования. :) [/ Д2]

2
ответ дан Ni Xiaoni 3 September 2018 в 12:50
поделиться

Я использую сельдерей для создания своих периодических задач. Сначала вам нужно установить его следующим образом:

pip install django-celery

Не забудьте зарегистрировать django-celery в своих настройках, а затем вы можете сделать что-то вроде этого:

from celery import task
from celery.decorators import periodic_task
from celery.task.schedules import crontab
from celery.utils.log import get_task_logger
@periodic_task(run_every=crontab(minute="0", hour="23"))
def do_every_midnight():
 #your code
1
ответ дан Peter Brittain 3 September 2018 в 12:50
поделиться

Некоторое время назад у меня было точно такое же требование, и я решил его решить, используя APScheduler ( Руководство пользователя )

простой и сохраняет его независимым от запроса на основе некоторого кода. Ниже приведен простой пример, который я использовал в своем коде.

from apscheduler.schedulers.background import BackgroundScheduler

scheduler = BackgroundScheduler()
job = None

def tick():
    print('One tick!')\

def start_job():
    global job
    job = scheduler.add_job(tick, 'interval', seconds=3600)
    try:
        scheduler.start()
    except:
        pass

Надеюсь, это поможет кому-то!

5
ответ дан PhoenixDev 3 September 2018 в 12:50
поделиться

Вы должны обязательно проверить django-q! Это не требует дополнительной настройки и, возможно, все, что необходимо для решения любых производственных проблем в коммерческих проектах.

Он активно развивается и очень хорошо интегрируется с django, django ORM, mongo, redis. Вот моя конфигурация:

# django-q
# -------------------------------------------------------------------------
# See: http://django-q.readthedocs.io/en/latest/configure.html
Q_CLUSTER = {
    # Match recommended settings from docs.
    'name': 'DjangoORM',
    'workers': 4,
    'queue_limit': 50,
    'bulk': 10,
    'orm': 'default',

# Custom Settings
# ---------------
# Limit the amount of successful tasks saved to Django.
'save_limit': 10000,

# See https://github.com/Koed00/django-q/issues/110.
'catch_up': False,

# Number of seconds a worker can spend on a task before it's terminated.
'timeout': 60 * 5,

# Number of seconds a broker will wait for a cluster to finish a task before presenting it again. This needs to be
# longer than `timeout`, otherwise the same task will be processed multiple times.
'retry': 60 * 6,

# Whether to force all async() calls to be run with sync=True (making them synchronous).
'sync': False,

# Redirect worker exceptions directly to Sentry error reporter.
'error_reporter': {
    'sentry': RAVEN_CONFIG,
},
}
0
ответ дан saran3h 3 September 2018 в 12:50
поделиться

RabbitMQ и Celery имеют больше возможностей и возможностей обработки задач, чем Cron. Если сбой задачи не является проблемой, и вы считаете, что будете обрабатывать сломанные задачи при следующем вызове, тогда Cron будет достаточным.

Celery & amp; AMQP позволит вам обрабатывать сломанную задачу, и она снова будет выполнена другим работником (работники Celery будут слушать следующую задачу для работы) до тех пор, пока не будет достигнут атрибут max_retries задачи. Вы можете даже вызывать задачи при сбое, например, протоколировать сбой, или отправлять электронное письмо администратору после достижения max_retries.

И вы можете распространять серверы Celery и AMQP, когда вам нужно масштабировать применение.

9
ответ дан sleblanc 3 September 2018 в 12:50
поделиться

Если вы хотите что-то более надежное, чем Celery , попробуйте TaskHawk, который построен поверх AWS SQS / SNS.

См. http: // taskhawk. readthedocs.io

0
ответ дан Sriram 3 September 2018 в 12:50
поделиться

Посмотрите на Django Poor Man's Cron, который является приложением Django, которое использует спам-роботы, роботы с индексированием поисковых систем и аналогичные для регулярного выполнения запланированных заданий

См.: http: // code.google.com/p/django-poormanscron/

14
ответ дан user41767 3 September 2018 в 12:50
поделиться

Сельдерей - это распределенная очередь задач, построенная на AMQP (RabbitMQ). Он также обрабатывает периодические задачи в виде cron-like (см. периодические задания ). В зависимости от вашего приложения это может стоить gander.

Сельдерей довольно легко настроить с помощью django ( docs ), а периодические задания фактически пропустят пропущенные задачи в случае время простоя. Сельдерей также имеет встроенные механизмы повтора, в случае неудачи задачи.

124
ответ дан WhyNotHugo 3 September 2018 в 12:50
поделиться

после части кода, я могу написать что угодно, как мои view.py:)

#######################################
import os,sys
sys.path.append('/home/administrator/development/store')
os.environ['DJANGO_SETTINGS_MODULE']='store.settings'
from django.core.management impor setup_environ
from store import settings
setup_environ(settings)
#######################################

из http://www.cotellese.net/2007/09/27 / обкатка внешние скрипты-против-Джанго-модели /

4
ответ дан xiaohei 3 September 2018 в 12:50
поделиться

Если вы используете стандартную ОС POSIX, вы используете cron .

Если вы используете Windows, вы используете в .

Напишите команду управления Django для

  1. Определите, на какой платформе они находятся.
  2. Либо выполните соответствующую команду «AT» для ваших пользователей, или обновить crontab для ваших пользователей.
32
ответ дан xuhdev 3 September 2018 в 12:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: