Ответ 1
Я нашел ответ на свой вопрос, копая в коде time_start
и time_start
атрибут time_start
задачи вычисляется функцией kombu.five.monotonic
. (Как ни странно, код комбу также ссылается на другой fooobar.com/info/15093/... для справки). Временная метка, возвращаемая этой функцией, относится к "монотонному" времени, вычисленному системным вызовом clock_gettime
.
Как поясняется в документации clock_gettime
, это монотонное время представляет собой время, прошедшее с "неопределенной отправной точки". Цель этой функции - следить за тем, чтобы время монотонно возрастало, несмотря на изменения других значений часов.
Таким образом, чтобы получить реальное время и время начала задания, нам просто нужно сравнить атрибут time_start
с текущим значением монотонных часов:
>> from datetime import datetime
>> from time import time
>> import kombu.five
>> datetime.fromtimestamp(time() - (kombu.five.monotonic() - 9636801.218162088))
datetime.datetime(2013, 11, 20, 9, 55, 56, 193768)
EDIT: атрибут time_start
о котором сообщает проверка, больше не является монотонным: https://github.com/celery/celery/pull/3684 И мне потребовалось всего четыре года, чтобы написать правильный запрос на получение 0 :-)