Django_rq, задания не выполняются из-за отсутствия позиционных аргументов

Я пытаюсь решить проблему с интеграцией Django_rq в мое приложение. У меня есть несколько импортов данных .csv, которые я создал и которые требуют довольно много времени для обработки. Все импорты данных похожи по своей природе, но отличаются по количеству выполняемого кода. На данный момент я обновил два импорта данных для использования Django_rq, и они успешно работают. Никаких проблем с ними нет.

Небольшая предыстория, все эти функции изначально использовали потоковый модуль python.

Проблема возникла, когда я обновил 3-ю функцию импорта данных. В дополнение к обновлению, как и в первых двух, я уменьшил количество позиционных аргументов с 5 до 1. Когда я запускаю импорт данных и добавляю задание в очередь, оно немедленно завершается неудачей.

Когда я проверяю реестр неудачных заданий, чтобы просмотреть обратную трассировку, там говорится

Traceback (most recent call last):
  File "/srv/cannondj/venv/lib/python3.8/site-packages/rq/worker.py", line 1061, in perform_job
    rv = job.perform()
  File "/srv/cannondj/venv/lib/python3.8/site-packages/rq/job.py", line 821, in perform
    self._result = self._execute()
  File "/srv/cannondj/venv/lib/python3.8/site-packages/rq/job.py", line 844, in _execute
    result = self.func(*self.args, **self.kwargs)
TypeError: process_task_data() missing 5 required positional arguments: 'all_jobs', 'all_tasks', 'all_assignment_types', 'all_assignment_statuses', and 'db_que'

Я нахожу это странным, потому что это те аргументы, от которых избавились. Новая функция 'process_task_data' теперь принимает только 1 аргумент.

def process_task_data(job_tasks):
    #Do stuff

Похоже, что она ссылается на предыдущую версию кода. Когда я меняю имя функции на другое, скажем, 'new_process_task_data', задание также не выполняется, и я получаю такую трассировку:

Traceback (most recent call last):
  File "/srv/cannondj/venv/lib/python3.8/site-packages/rq/worker.py", line 1061, in perform_job
    rv = job.perform()
  File "/srv/cannondj/venv/lib/python3.8/site-packages/rq/job.py", line 821, in perform
    self._result = self._execute()
  File "/srv/cannondj/venv/lib/python3.8/site-packages/rq/job.py", line 844, in _execute
    result = self.func(*self.args, **self.kwargs)
  File "/srv/cannondj/venv/lib/python3.8/site-packages/rq/job.py", line 238, in func
    return import_attribute(self.func_name)
  File "/srv/cannondj/venv/lib/python3.8/site-packages/rq/utils.py", line 157, in import_attribute
    attribute_owner = getattr(module, attribute_owner_name)
AttributeError: module 'data_import.task_import' has no attribute ''

Теперь он выдает ошибку атрибута и показывает, что не может найти имя функции, которую я вызываю. Он просто показывает пустую строку.

Эта проблема запутала меня в последние несколько дней, и я не могу понять, в чем проблема и как ее решить.

Вот некоторые вещи, которые я пробовал:

Попробовали оба метода запуска заданий.

queue.enqueue(process_task_data, job_tasks)

и используя декоратор заданий

@job
def process_task_data(job_tasks):
    #Do stuff

Оба способа работают с первыми двумя импортами данных, но не могут заставить ни один из них работать с этим 3-м импортом данных.

На stackoverflow было похожее сообщение, расположенное здесь. В нем говорилось о 'проблеме круговой зависимости'. Как функция, загружающая задания в очередь, так и функция 'process_task_data' находятся в одном и том же .py файле, поэтому я не думаю, что это проблема импорта.

Я пробовал ленивую ссылку, получаю те же ошибки, что и выше. Эта идея была найдена здесь.

queue.enqueue('data_import.task_import.process_task_data', job_tasks)

Я наткнулся на некоторые потенциальные решения, которые кажутся очень похожими проблемами.

Я обнаружил похожую проблему, обсуждаемую здесь при попытке исследовать проблему AttibuteError. Там говорится о потенциальных конфликтах с файлами .pyc. Это казалось потенциальной причиной, поэтому я нашел несколько других сообщений, не связанных с rq, в которых говорилось об этом конфликте. Вот. Недавно я объединил изменения из моей основной ветки в эту боковую ветку redis. Признаюсь, я не очень хорошо знаком с работой git и тем, как слияние ветвей может повлиять на работу кода. Но в прошлом у меня не было никаких проблем при слиянии ветвей.

Я пробовал перезапускать redis-сервер несколько раз. Я пробовал перезапускать/перезагружать рабочие очереди несколько раз.

Я уже некоторое время кручусь над этим вопросом и чувствую, что он смотрит мне прямо в лицо, но не могу увидеть проблему.

Если у кого-то есть какие-либо предложения или дополнительная информация, которая поможет мне решить эту проблему, это было бы весьма кстати.

Спасибо.

Вернуться на верх