Railway部署的Flask应用中Celery[Redis]任务始终处于Pending状态的问题求助
Railway部署的Flask应用中Celery[Redis]任务始终处于Pending状态的问题求助
大家好,我在Railway上部署了一个Flask API,尝试用Celery实现后台异步任务,但碰到了个棘手的问题:虽然能打印出任务后端和task id,但任务状态一直是PENDING,而且感觉每次部署下来只会创建一个任务。下面是我的具体实现细节,恳请各位帮忙排查下问题!
1. Celery初始化配置(工具类部分)
""" Utils """ from celery import Celery def make_celery(app): """ Make celery """ celery = Celery(app.import_name) celery.conf.update(app.config["CELERY_CONFIG"]) celery.conf.update( task_serializer='json', result_serializer='json', accept_content=['json'], timezone='UTC') class ContextTask(celery.Task): """ Context task """ def __call__(self, *args, **kwargs): with app.app_context(): return self.run(*args, **kwargs) celery.Task = ContextTask return celery
2. Celery任务定义(tasks.py)
""" path: tasks.py Celery tasks. """ import pandas as pd from celery import shared_task from celery.contrib.abortable import AbortableTask from facebook_business.adobjects.adsinsights import AdsInsights from facebook_business.adobjects.adaccount import AdAccount @shared_task(bind=True, base=AbortableTask) def fetch_insights_task(self, account_id): """ Get insights from Facebook Ads API. """ params = { 'level': 'campaign', 'date_preset': 'yesterday', 'time_increment': 1, 'breakdowns': ['gender', 'age'], } # 省略后续Facebook API调用及数据处理逻辑... return insights
3. Flask视图中的任务调用(views.py)
@main.route('/insights') def get_insights(): """ Insights page """ if 'account_id' not in session: return redirect('/select_account') task_id = session.get('insights_task_id') task = fetch_insights_task.AsyncResult(task_id) if task_id else None # 省略后续页面渲染或任务状态返回逻辑...
4. Worker启动命令
我使用这条命令启动Celery Worker:
celery -A run:celery worker --loglevel=debug -P solo
问题现象与预期
- 预期:提交的任务能正常执行并完成,状态会从
PENDING变为SUCCESS或对应状态 - 实际:所有任务的状态一直停留在
PENDING,且每次部署后似乎只有第一个任务会被创建,后续任务无响应
备注:内容来源于stack exchange,提问作者concaption
相关产品推荐
相关产品推荐

