Запустить запланированное задание с помощью APScheduler с флягой (используя mod_wsgi) - PullRequest
0 голосов
/ 24 августа 2018

Я пытаюсь отправить электронное письмо в фоновом режиме в определенное время каждый день в колбе.Приложение зависает, когда я добавляю работу, и я думаю, что у меня возникла проблема с многопоточностью.Конфиг выглядит следующим образом:

jobstores = {
    'default': SQLAlchemyJobStore(url='path_to_my_db')
        }
executors = {
    'default': ThreadPoolExecutor(5),
    'processpool': ProcessPoolExecutor(3)
        }
job_defaults = {
    'coalesce': False,
    'max_instances': 3
        }
scheduler = BackgroundScheduler(jobstores=jobstores, executors=executors, job_defaults=job_defaults, timezone=utc)
scheduler.start()

, тогда я добавляю свою работу

def send_reports():
     msg = Message("Microphone testing 1, 2",
     recipients=["me@mycompany.com"])
     mail.send(msg)
scheduler.add_job(send_reports, 'cron', hour=8, minute=23)

Если я закомментирую scheduler.add_job строку, приложение работает нормально

В виртуальном хостеУ меня есть строки

WSGIDaemonProcess www.mycomapny.com processes=2 threads=5
WSGIScriptAlias / /var/www/html/myapp.wsgi

Буду признателен за вашу помощь

1 Ответ

0 голосов
/ 06 сентября 2018

Мне наконец-то удалось отправить электронное письмо с помощью APSchedular.

Мои настройки в Apache Virtual host, чтобы разрешить несколько потоков (использую mod_wsgi)

WSGIDaemonProcess app threads=15 maximum-requests=10000
WSGIScriptAlias / /var/www/html/myapp.wsgi
WSGIProcessGroup app
WSGIApplicationGroup %{GLOBAL}

Затем в моем приложении я сначала импортирую фон BackgroundScheduler

from apscheduler.schedulers.background import BackgroundScheduler

Создайте свой планировщик с часовым поясом, но используйте все остальные настройки по умолчанию

scheduler = BackgroundScheduler(timezone='Africa/Nairobi')

Затем перед первым запросом я запускаю планировщик и добавляю задание send_reports

@app.before_first_request
def initialize():
    scheduler.start()
    scheduler.add_job(send_reports, 'cron', hour=10, minute=10, end_date='2055-05-30')

Отправка отчетов в виде PDF-файлов с использованием pdfkit и flask-email была другим вопросом, но суть его заключается в установке правильной версии wkhtmltopdf и наличии правильного пути env, а также в том, что вы передаете контекст приложения в flask-mail отправлять почту в фоновом потоке.

Таким образом, отчеты отправляются на указанные электронные письма каждый день в 1010 утра. Надеюсь, кто-то найдет это полезным

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...