Django RQ ModuleNotFoundError xxx не является пакетом
Я использую django rq для некоторой долго выполняющейся задачи, которой я хотел бы предоставить некоторую обратную связь о ее ходе. Поэтому я создал функцию, которая регистрируется как новая задача и устанавливает некоторые атрибуты модели и сохраняет их.
Вот упрощенный вид:
class Status(models.Model):
progress_a = models.PositiveIntegerField(default=0)
class MyObject(models.Model):
status = models.OneToOneField(Status)
@django_rq.job('low-short')
def set_status(self, progress_name, progress):
setattr(self.status, progress_name, progress)
self.status.save()
def set_status_a(self, progress):
self.set_status.delay(self=self, progress_name="progress_a", progress=progress)
@django_rq.job('default')
def long_running_job():
my_instance.set_status_a(100)
Теперь, выполнив это, я получаю следующий результат :
2022-05-16 15:50:03 app-85c8459c79-mrkhg rq.worker[1] INFO low-short: api.models.MyObject.set_status(progress=0, progress_name='progress_a', self=<MyObject: MyObject object (129)>) (c13480ca-a25b-4463-af9a-a0a0dd67de61)
2022-05-16 15:50:03 app-85c8459c79-mrkhg root[41] WARNING Import error for 'api.models.MyObject'
Traceback (most recent call last):
File "/usr/local/lib/python3.9/site-packages/rq/utils.py", line 141, in import_attribute
module = importlib.import_module(module_name)
File "/usr/local/lib/python3.9/importlib/__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
File "<frozen importlib._bootstrap>", line 981, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'api.models.MyObject'; 'api.models' is not a package
- api это пакет
- api.models модуль
- models.MyObject класс.
Я не понимаю, почему это не работает. Что я делаю не так? long_running_job запускается как задание безупречно.
Примечание: при удалении self=self жалуется на отсутствие self.