django - Celery 完成后将任务保存在内存中
问题描述
我正在使用 Django 和 Celery 来卸载长时间运行的任务。这一切都很好,除了当一项任务完成时,Celery 似乎将数据保存在内存中。
@shared_task
def export_xlsx():
tmpfile = settings.FILE + ".tmp"
with open(tmpfile, "w") as datafile:
datafile.write(to_xlsx())
os.rename(settings.FILE + ".tmp", settings.FILE)
return True
该函数使用fromto_xlsx()
将 Excel 工作簿作为字符串返回:save_virtual_workbook
openpyxl.writer.excel
def to_xlsx():
wb = Workbook()
ws = wb.active
col = 1
row = 1
articles = models.Article.objects.order_by('articleid')
for article in articles:
for articledescription in article.articledescription_set.all():
ws.cell(row=row, column=1, value=article.articleid)
ws.cell(row=row, column=3, value=articledescription.description)
row += 1
return save_virtual_workbook(wb)
似乎这个字符串永远不会从内存中释放出来:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
26536 bf 20 0 2763256 1.921g 9220 S 0.0 25.0 4:45.69 celery
26538 bf 20 0 1550080 798892 7336 R 88.0 9.9 0:08.20 celery
PID 26536 是一个已经完成的任务。26538 是一个正在运行的。
解决方案
推荐阅读
- mysql - Formio-sql 在本地系统中尝试使用 yarn run 和 docker 时无法运行项目
- java - SLF4j 记录器中的字符串是否消耗堆空间
- amazon-web-services - 主机名/IP 与证书的替代名称不匹配
- cockroachdb - 用于 sql 转储导入的 Cockroach DB 多租户 IMPORT 错误
- python - 覆盖在我的项目中找不到模块
- java - 如何访问 Akka Stream 的计算结果?
- erlang - Erlang:如何返回列表的元素?
- sql - 从一个表中选择,从另一个表中计数,WHRER
- python-3.x - 试图找出从列表中随机选择一个项目的逻辑,使用返回值从另一个列表中随机选择一个项目。Python
- html - 添加 schema.org 文章 - LOGO 问题