python - 如何将长时间运行的 Celery 作业的结果存储在 JSON 文件中而不阻塞 Flask 上的 REST 端点?
问题描述
我创建了一个长时间运行的 Celery worker 来处理网络抓取并填充字典对象。我创建了多个异步运行的作业,所有这些作业都填充同一个 dict 对象。我需要一种将我的工作人员中的结果转储到 JSON 文件的方法。它可以定期或在工作完成后完成,但它不应阻止我的 API 响应。
@celery.task(name="tasks.workertask")
def worker(d, x):
"""
Do some long task on x and populate the dictionary d
"""
def collect(x_list)
d = dict()
for x in x_list:
worker.delay(d,x)
return d.copy()
@application.route('/api')
def api():
#Store x_list
x_list = [...]
d = collect(x_list)
with open('result.json','w') as fp:
json.dump(d,fp)
return "Dumping into JSON"
转储到 result.json 是空的,因为任务在后台运行。我不希望这个任务阻塞我的 API 响应,因为任务非常长(超过 12 小时)
解决方案
推荐阅读
- javascript - 在嵌套对象结构中,如何递归地收集不同类型的对象 ID?
- css - CSS文本省略号以防止网格溢出
- laravel - 在 laravel 的视图中显示多个图像的问题
- git - 首次访问后fluxcd失败
- python - 仅将系列添加到 Python 中 DataFrame 的第一行
- reactjs - 使用 react useffect 获取数据,然后根据之前获取的数据进行下一次获取
- python - 生成列的 SQLAlchemy 动态构造
- ios - 应用内购买仅在首次应用启动时失败
- javascript - HTML Navbar Scroll Trigger 无法同时获得样式和动画
- mongodb - MongoDB: How to find specific value in nested array, if found then show only that array not all?