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-сервер несколько раз. Я пробовал перезапускать/перезагружать рабочие очереди несколько раз.
Я уже некоторое время кручусь над этим вопросом и чувствую, что он смотрит мне прямо в лицо, но не могу увидеть проблему.
Если у кого-то есть какие-либо предложения или дополнительная информация, которая поможет мне решить эту проблему, это было бы весьма кстати.
Спасибо.