Django: py.test с использованием той же тестовой базы данных в отдельном процессе - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть некоторая функция (save_histoty), которая использует многопроцессорность.Эта функция вставляет объекты в БД.Чтобы улучшить время, я использовал Process из многопроцессорной обработки.Запуск метона:

def run(self):
    from time import sleep
    from django import db

    db.connections.close_all()

Я использую новое соединение для каждого процесса так же, как это необходимо.Эта функция находится в модуле night_scripts.И его работа хороша

Но тогда я использую py.test

def test_order(self):
    res = night_scripts.run_night_scripts()

Трассировка назад:

def create_cursor (self):

cursor = self.connection.cursor ()
E InterfaceError: соединение уже закрыто

CRITICAL [NIGHT TESTING] script <save_history> failed
Traceback (most recent call last):
  File "/home/healfy/PycharmProjects/finance_/finance/finance/../apps/main/night_scripts.py", line 65, in wrapper
    func(*args, **kwargs)
  File "/home/healfy/PycharmProjects/finance_/finance/finance/../apps/main/night_scripts.py", line 268, in delete_unfinished_loans
    Loan.objects.delete_unfinished_loans()
  File "/home/healfy/PycharmProjects/finance_/finance/finance/../apps/main/managers.py", line 594, in delete_unfinished_loans
    .update(status=Loan.REVOKED)
  File "/home/healfy/.virtualenvs/finance/local/lib/python2.7/site-packages/django/db/models/query.py", line 637, in update
    rows = query.get_compiler(self.db).execute_sql(CURSOR)
  File "/home/healfy/.virtualenvs/finance/local/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 1148, in execute_sql
    cursor = super(SQLUpdateCompiler, self).execute_sql(result_type)
  File "/home/healfy/.virtualenvs/finance/local/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 833, in execute_sql
    cursor = self.connection.cursor()
  File "/home/healfy/.virtualenvs/finance/local/lib/python2.7/site-packages/django/db/backends/base/base.py", line 233, in cursor
    cursor = self.make_cursor(self._cursor())
  File "/home/healfy/.virtualenvs/finance/local/lib/python2.7/site-packages/django/db/backends/base/base.py", line 206, in _cursor
    return self.create_cursor()
  File "/home/healfy/.virtualenvs/finance/local/lib/python2.7/site-packages/django/db/utils.py", line 94, in __exit__
    six.reraise(dj_exc_type, dj_exc_value, traceback)
  File "/home/healfy/.virtualenvs/finance/local/lib/python2.7/site-packages/django/db/backends/base/base.py", line 206, in _cursor
    return self.create_cursor()
  File "/home/healfy/.virtualenvs/finance/local/lib/python2.7/site-packages/django/db/backends/postgresql/base.py", line 211, in create_cursor
    cursor = self.connection.cursor()
InterfaceError: connection already closed

Это означает, что когда функция выполняется, она закрывает все соединения?
И как это исправить?
платформа linux2 -- Python 2.7.15rc1, pytest-2.9.1, py-1.6.0, pluggy-0.3.1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...