Skip to content
Snippets Groups Projects
Commit e913aeae authored by Martin Mareš's avatar Martin Mareš
Browse files

Spouštění jobů pomocí uwsgi mules

parent d33c3c91
No related branches found
No related tags found
2 merge requests!14Asynchronní joby,!9WIP: Zárodek uživatelské části webu a submitování
- select for update
Nasazení: Nasazení:
- zkontrolovat rotování logů (i u /akce/mathletics/ a jiných instancí uwsgi) - zkontrolovat rotování logů (i u /akce/mathletics/ a jiných instancí uwsgi)
- zapnout mule v uwsgi.ini
- upgradovat strukturu DB
- doplnit config.py
...@@ -18,5 +18,6 @@ mount = /osmo-test=mo.web:app ...@@ -18,5 +18,6 @@ mount = /osmo-test=mo.web:app
plugin = python3 plugin = python3
virtualenv = venv virtualenv = venv
manage-script-name = true manage-script-name = true
mule
static-map = /static=static static-map = /static=static
...@@ -13,6 +13,7 @@ import werkzeug.exceptions ...@@ -13,6 +13,7 @@ import werkzeug.exceptions
import mo import mo
import mo.config as config import mo.config as config
import mo.db as db import mo.db as db
import mo.jobs
import mo.users import mo.users
import mo.util import mo.util
from mo.util import logger from mo.util import logger
...@@ -83,6 +84,39 @@ def init_request(): ...@@ -83,6 +84,39 @@ def init_request():
app.before_request(init_request) app.before_request(init_request)
### UWSGI glue ###
try:
import uwsgi
from uwsgidecorators import timer, signal
# Čas od času se probudíme a projdeme joby pro případ, že by se ztratil signál.
# Také při tom expirujeme zastaralé joby.
@timer(120, target='mule')
def mule_timer(signum):
app.logger.debug('Mule: Timer tick')
with app.app_context():
mo.now = mo.util.get_now()
mo.jobs.process_jobs()
# Obykle při vložení jobu dostaneme signál.
@signal(42, target='mule')
def mule_signal(signum):
app.logger.debug('Mule: Přijat signál')
with app.app_context():
mo.now = mo.util.get_now()
mo.jobs.process_jobs()
def wake_up_mule():
app.logger.debug('Mule: Posíláme signál')
uwsgi.signal(42)
mo.jobs.send_notify = wake_up_mule
except ImportError:
app.logger.warn('Nenalezeno UWSGI, takže automatické notifikace nepoběží.')
# Většina webu je v samostatných modulech # Většina webu je v samostatných modulech
import mo.web.auth import mo.web.auth
import mo.web.menu import mo.web.menu
......
...@@ -30,5 +30,6 @@ setuptools.setup( ...@@ -30,5 +30,6 @@ setuptools.setup(
'pikepdf', 'pikepdf',
'psycopg2', 'psycopg2',
'sqlalchemy', 'sqlalchemy',
'uwsgidecorators',
], ],
) )
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment