Django ORM и мультиобработка - PullRequest
       11

Django ORM и мультиобработка

0 голосов
/ 20 января 2020

У меня есть ситуация: мое приложение 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

Я искал повсюду, и, кажется, нет никого с той же проблемой, с которой я сталкиваюсь. Может ли кто-нибудь объяснить мне, что является причиной фатальной ошибки протокола связи с двумя задачами?

...