Сельдерей сохраняет задание в памяти после финиша - PullRequest
0 голосов
/ 11 июня 2018

Я использую 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

функция to_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 - это тот, который работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...