У меня есть ситуация: мое приложение django выполняет следующие действия:
1) Извлекает данные из внешнего источника, обрабатывает и помещает их в БД. Как часть этого шага, он делает один вызов БД, используя ORM Django, чтобы извлечь некоторые данные, которые будут частью микса для обработки.
2) В другом методе он берет недавно переданные данные, обрабатывает их и выполняет некоторые вычисления. Это включает 2 вызова ORM. Один для извлечения и извлечения, а другой - для извлечения sh в БД.
В настоящее время я пытаюсь реализовать многопроцессорную архитектуру. Шаг (1) работает без проблем. Возможность получать данные из внешнего источника и помещать их в БД с помощью операторов oracle. Тем не менее, с шагом (2) я получаю всевозможные ошибки:
Process Process-1: Traceback (most recent call last): File "/apps/python/python3.6.3/lib/python3.6/site-packages/django/db/utils.py", line 96, in inner
return func(*args, **kwargs) File "/apps/python/python3.6.3/lib/python3.6/site-packages/django/db/backends/oracle/base.py", line 524, in fetchmany
return tuple(self.cursor.fetchmany(size)) cx_Oracle.DatabaseError: ORA-03106: fatal two-task communication protocol error
The above exception was the direct cause of the following exception:
Traceback (most recent call last): File "/apps/python/python3.6.3/lib/python3.6/multiprocessing/process.py", line 258, in _bootstrap
self.run() File "/apps/python/python3.6.3/lib/python3.6/multiprocessing/process.py", line 93, in run
self._target(*self._args, **self._kwargs) File "*masked*/decorator_mgr.py", line 26, in wrapper
return method(*args, **kwargs) File "*masked*/volume_worker.py", line 33, in extract_perf
super().extract_perf() File "*masked*/base_worker.py", line 38, in extract_perf
print(self.get_unique_key()) File "*masked*/volume_worker.py", line 124, in get_unique_key
return ModelA.method1(self.start_datetime, self.end_datetime) File "*masked*/modelA.py", line 75, in method1
return [x[0] for x in cls.objects.filter(**filter_conditions).values_list('vol_serial_no')] File "/apps/python/python3.6.3/lib/python3.6/site-packages/django/db/models/query.py", line 268, in __iter__
self._fetch_all() File "/apps/python/python3.6.3/lib/python3.6/site-packages/django/db/models/query.py", line 1186, in _fetch_all
self._result_cache = list(self._iterable_class(self)) File "/apps/python/python3.6.3/lib/python3.6/site-packages/django/db/models/sql/compiler.py", line 1005, in apply_converters
for row in map(list, rows): File "/apps/python/python3.6.3/lib/python3.6/site-packages/django/db/models/sql/compiler.py", line 1466, in cursor_iter
for rows in iter((lambda: cursor.fetchmany(itersize)), sentinel): File "/apps/python/python3.6.3/lib/python3.6/site-packages/django/db/models/sql/compiler.py", line 1466, in <lambda>
for rows in iter((lambda: cursor.fetchmany(itersize)), sentinel): File "/apps/python/python3.6.3/lib/python3.6/site-packages/django/db/utils.py", line 96, in inner
return func(*args, **kwargs) File "/apps/python/python3.6.3/lib/python3.6/site-packages/django/db/utils.py", line 89, in __exit__
raise dj_exc_value.with_traceback(traceback) from exc_value File "/apps/python/python3.6.3/lib/python3.6/site-packages/django/db/utils.py", line 96, in inner
return func(*args, **kwargs) File "/apps/python/python3.6.3/lib/python3.6/site-packages/django/db/backends/oracle/base.py", line 524, in fetchmany
return tuple(self.cursor.fetchmany(size)) django.db.utils.DatabaseError: ORA-03106: fatal two-task communication protocol error
Я искал повсюду, и, кажется, нет никого с той же проблемой, с которой я сталкиваюсь. Может ли кто-нибудь объяснить мне, что является причиной фатальной ошибки протокола связи с двумя задачами?