Расскажи про интересную ошибку на предыдущей работе
Python
Junior
Рунити
Расскажи про интересную ошибку на предыдущей работе
Ответы
Однажды столкнулся с кейсом, когда в продакшене перестали работать Celery-таски. Оказалось, проблема была в сериализации datetime объектов при использовании pickle.
В коде был декоратор, который логировал время выполнения задач:
```
import pickle
from datetime import datetime
def log_time(func):
def wrapper(*args, **kwargs):
start = datetime.now()
result = func(*args, **kwargs)
print(f"Execution time: {datetime.now() - start}")
return result
return wrapper
@log_time
def process_data(data):
# some processing
return data
# При сериализации в Celery:
pickle.dumps(process_data) # Ошибка!
```
Проблема: `datetime.now()` внутри декоратора пытался сериализоваться, но pickle не может корректно обработать динамически созданные объекты datetime.
Фикс: заменили `datetime.now()` на передачу времени как аргумента или использовали `json` вместо `pickle` для сериализации.
Вывод: всегда проверяйте сериализуемость всего, что попадает в Celery!