Django 1.11: что терпит неудачу `pickle` в моем параллельном тесте? - PullRequest
0 голосов
/ 02 мая 2018

Я работаю в докернизированном Django 1.11 и хочу запустить мой многолетний параллельный набор тестов:

manage.py test mainfolder --parallel -v2

Несмотря на то, что в моем наборе тестов он не работает 2 минуты (после всех успешных тестов) с ошибкой рассола. Трассировка стека, однако, не дает мне указания, где она происходит. Как я могу стать ближе к тому, что терпит неудачу? tblib установлено.

test_foo (myapp.some.testmodule.SomeTestCase) ... ok
Traceback (most recent call last):
  File "./myapp/manage.py", line 34, in <module>
    execute_from_command_line()
  File "/var/venv-stable/lib/python2.7/site-packages/django/core/management/__init__.py", line 364, in execute_from_command_line
    utility.execute()
  File "/var/venv-stable/lib/python2.7/site-packages/django/core/management/__init__.py", line 356, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/var/venv-stable/lib/python2.7/site-packages/django/core/management/commands/test.py", line 29, in run_from_argv
    super(Command, self).run_from_argv(argv)
  File "/var/venv-stable/lib/python2.7/site-packages/django/core/management/base.py", line 283, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/var/venv-stable/lib/python2.7/site-packages/django/core/management/base.py", line 330, in execute
    output = self.handle(*args, **options)
  File "/var/venv-stable/lib/python2.7/site-packages/django/core/management/commands/test.py", line 62, in handle
    failures = test_runner.run_tests(test_labels)
  File "/var/venv-stable/lib/python2.7/site-packages/django/test/runner.py", line 603, in run_tests
    result = self.run_suite(suite)
  File "/var/venv-stable/lib/python2.7/site-packages/django/test/runner.py", line 567, in run_suite
    return runner.run(suite)
  File "/usr/lib/python2.7/unittest/runner.py", line 151, in run
    test(result)
  File "/usr/lib/python2.7/unittest/suite.py", line 70, in __call__
    return self.run(*args, **kwds)
  File "/var/venv-stable/lib/python2.7/site-packages/django/test/runner.py", line 370, in run
    subsuite_index, events = test_results.next(timeout=0.1)
  File "/usr/lib/python2.7/multiprocessing/pool.py", line 659, in next
    raise value
cPickle.PicklingError: Can't pickle <type 'module'>: attribute lookup __builtin__.module failed

1 Ответ

0 голосов
/ 08 мая 2018

В глубине души у меня был __init__ метод, смешанный с тестовым сценарием, не написанный мной. Он сохранил ссылку на импортированный модуль в классе, который я не знаю, для кого имеет смысл.

from django.core import mail

def __init__(self, *args, **kwargs):
    super(EmailTestHelperMixin, self).__init__(*args, **kwargs)
    self.mail = mail

Устранение, которое решило мою проблему.

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