ValueError: set_wakeup_fd работает только в основном потоке на Apache2.4.41 + Python 3.8.1 + Django 3.0.2 + MySQL 8.0.19 - PullRequest
2 голосов
/ 23 февраля 2020

Когда я запускаю свое Django веб-приложение с Apache2.4.41 + Python 3.8.1 + Django 3.0.2 + MySQL 8.0.19 на Windows 10 Professional, оно выдает значение Error в / , set_wakeup_fd работает только в основном потоке.

Эта проблема была результатом регрессии в Python 3.8 и была исправлена ​​в ноябре в последующих сборках Python. Для получения более подробной информации - https://bugs.python.org/issue38563.

Отслеживание ошибки выглядит следующим образом -

Environment:

Request Method: GET
Request URL: http://127.0.0.1/

Django Version: 3.0.2
Python Version: 3.8.1
Installed Applications:
['Analysis.apps.AnalysisConfig',
 'django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django.contrib.humanize']


Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']



Traceback (most recent call last):
  File "c:\python38\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
    response = get_response(request)
  File "c:\python38\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "c:\python38\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "F:\IndianMarketAnalysis\ISMA\Analysis\views.py", line 8, in home
    date_list = dict(d.date_list())
  File "F:\IndianMarketAnalysis\ISMA\Analysis\models.py", line 7, in date_list
    with connection.cursor() as cursor:
  File "c:\python38\lib\site-packages\django\utils\asyncio.py", line 19, in inner
    event_loop = asyncio.get_event_loop()
  File "c:\python38\lib\asyncio\events.py", line 636, in get_event_loop
    self.set_event_loop(self.new_event_loop())
  File "c:\python38\lib\asyncio\events.py", line 656, in new_event_loop
    return self._loop_factory()
  File "c:\python38\lib\asyncio\windows_events.py", line 310, in __init__
    super().__init__(proactor)
  File "c:\python38\lib\asyncio\proactor_events.py", line 632, in __init__
    signal.set_wakeup_fd(self._csock.fileno())

Exception Type: ValueError at /
Exception Value: set_wakeup_fd only works in main thread

Кроме того, это приложение очень хорошо работает в локальной среде разработки с использованием - python manage.py runserver.

Пожалуйста, предложите следующие шаги для продвижения вперед.

Ответы [ 2 ]

0 голосов
/ 27 февраля 2020

обновлен до python 3.8.2, отлично работал на моем windows сервере.

примечания к выпуску https://docs.python.org/release/3.8.2/whatsnew/changelog.html#python -3-8-2-final

выпуск bpo-34679: исправлено asynci.ProactorEventL oop .close () теперь вызывает только signal.set_wakeup_fd () в основном потоке.

0 голосов
/ 24 февраля 2020

У меня точно такая же ошибка. Я открыл вопрос .

Если вы хотите остаться в текущей версии Python, я нашел временное решение, которое заключается в добавлении следующих строк в asgiref\__init__.py (как было предложено в выпуск ):

if sys.platform == "win32" and sys.version_info >= (3, 8, 0):
    asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...