DjangBackgroundTask完成执行后如何释放内存资源?

2024-05-17 04:03:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Django后台任务执行一些长时间运行的任务。后台任务从数据库中获取一些数据,然后 对其进行内部处理,每个任务需要1 GB的内存

任务正在以异步方式运行

当任何任务运行并完成其执行时,Django后台任务在完成执行后不会释放内存。导致Dameon吊舱内存问题。Django后台任务中内存资源的释放有什么解决方案吗? 例如

注意:可用资源是固定的。因此,我们需要一个解决任务的资源释放问题的方法。目前,当pod重新启动时,内存会被释放

这就是模块结构的样子

../bulk_file_operations/
├── apps.py
├── tasks.py
├── views.py
├── file_handler.py

任务。py

@background()
def my_task():
    """
    a long-running task that takes time of 20-30 mins, which includes some DB interactions.
    """
    process_data_n_download(model_queryset_object)
    pass

文件\u handler.py


def process_data_n_download(queryset_object):
    """process this ORM object for file creation."""
    pass

Tags: django内存pytaskdataobjectdownloaddef
1条回答
网友
1楼 · 发布于 2024-05-17 04:03:26

不能显式释放内存。您需要做的是确保不保留对对象的引用。然后它们将被垃圾收集,释放内存

就你而言

  1. 如果需要大型列表,通常需要重新组织代码,通常使用生成器/迭代器。这样,您根本不需要在内存中存储大量列表http://www.prasannatech.net/2009/07/introduction-python-generators.html

  2. 检查django-background-tasks应用程序的内部是否保留了任何引用。此外,还要检查代码。您可以使用del关键字删除引用(如果有)

相关问题 更多 >