我有一个金字塔应用程序叫mainsite.
该站点以非常异步的方式工作,主要是通过从视图启动的线程来执行后端操作.
它使用sqlalchemy连接到mysql,并使用ZopeTransactionExtension进行会话管理.
到目前为止,应用程序运行良好.
我需要在其上运行定期作业,它需要使用从视图中启动的一些相同的异步函数.
我使用了apscheduler,但遇到了问题.所以我想把celery beat作为一个单独的过程,将mainapp视为一个库并导入要使用的函数.
我的芹菜配置看起来像这样:
from datetime import timedelta
from api.apiconst import RERUN_CHECK_INTERVAL, AUTOMATION_CHECK_INTERVAL, \
AUTH_DELETE_TIME
BROKER_URL = 'sqla+mysql://em:em@localhost/edgem'
CELERY_RESULT_BACKEND = "database"
CELERY_RESULT_DBURI = 'mysql://em:em@localhost/edgem'
CELERYBEAT_SCHEDULE = {
'rerun': {
'task': 'tasks.rerun_scheduler',
'schedule': timedelta(seconds=RERUN_CHECK_INTERVAL)
},
'automate': {
'task': 'tasks.automation_scheduler',
'schedule': timedelta(seconds=20)
},
'remove-tokens': {
'task': 'tasks.token_remover_scheduler',
'schedule': timedelta(seconds=2 * 24 * 3600 )
},
}
CELERY_TIMEZONE = 'UTC'
Run Code Online (Sandbox Code Playgroud)
tasks.py是
from celery import Celery
celery = Celery('tasks')
celery.config_from_object('celeryconfig')
@celery.task
def rerun_scheduler():
from mainsite.task import check_update_rerun_tasks
check_update_rerun_tasks() …Run Code Online (Sandbox Code Playgroud)