rewrite worker to run on celery and redis

This commit is contained in:
2023-04-13 02:11:59 -04:00
parent b07a9c70d2
commit 85753c5afe
3 changed files with 28 additions and 16 deletions

View File

@@ -8,9 +8,10 @@ from misc import datetime, date, time, currDay, prevDay, ZoneInfo, currVersion,
from db import (db, Period, Task, Event, User)
from sqlalchemy import inspect
from forms import (TaskForm, EventForm, PeriodForm, SignupForm, LoginForm, SettingsForm)
from create_events import createEvents
from log import appLogger
from worker import runCreateEvents
# init logger
logger = appLogger('app')
@@ -183,7 +184,7 @@ def newPeriod():
db.session.commit()
logger.info(f'New period added by \'{current_user.userName}\' from {sourceIP}')
# Run createEvents upon adding new period
createEvents(db, currDay, Period, Event)
runCreateEvents()
return redirect(f'/period/edit/{period.period}')
return render_template('newPeriod.html', form=form)

View File

@@ -26,6 +26,10 @@ WTForms-SQLAlchemy==0.3.0
# APScheduler automated scheduler
APScheduler==3.10.1
# Celery Task Queue
celery[redis]==5.2.7
redis==4.5.4
# Python Time packages
pytz==2022.7.1

View File

@@ -1,9 +1,10 @@
from celery import Celery
from celery.schedules import crontab
from create_events import createEvents
import os
from flask import Flask
from misc import currDay, datetime, time, timedelta
from db import db, Period, Event
from create_events import createEvents
from apscheduler.schedulers.background import BlockingScheduler
basedir = os.path.abspath(os.path.dirname(__file__))
@@ -18,18 +19,24 @@ app.config['SQLALCHEMY_DATABASE_URI'] =\
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db.init_app(app)
# Define function to run create_events with app context
def run_create_events():
redis_url = 'redis://' + \
os.environ['REDIS_HOST'] + \
':' + os.environ['REDIS_PORT'] + \
'/' + os.environ['REDIS_DBNUM']
celerymsg = Celery('tasks', backend=redis_url, broker=redis_url)
# Task definitions
@celerymsg.task
def runCreateEvents():
with app.app_context():
createEvents(db, currDay, Period, Event)
# Call createEvents on initial launch of the script
run_create_events()
# Set up scheduler to run function at 59th minute of every hour
scheduler = BlockingScheduler()
scheduler.add_job(run_create_events, 'cron', minute=59)
# Start scheduler
scheduler.start()
# Scheduled tasks
celerymsg.conf.beat_schedule = {
'hourly-createevents': {
'task': 'worker.runCreateEvents',
# Run hourly
'schedule': crontab(hour="*"),
}
}