Cuando ejecuto mi aplicación web Django con Apache2.4.41 + Python 3.8.1 + Django 3.0.2 + MySQL 8.0.19 en la versión de Windows 10 Professional, arroja Value Error en /. set_wakeup_fd solo funciona en el hilo principal.
Este problema fue el resultado de una regresión en Python 3.8 y se solucionó en noviembre en versiones posteriores de Python. Para obtener más detalles: https://bugs.python.org/issue38563 .
Stacktrace del error es el siguiente:
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 threadAdemás, esta aplicación funciona muy bien en el entorno de desarrollo local mediante el uso de python manage.py runserver.
Por favor sugiera los siguientes pasos para seguir adelante.
El mismo problema ocurre en Flask 2.0.0 ( pip install --pre flask ):
@app.get('/') async def say_hello(): return {'message': 'Hello!'} > flask run Traceback (most recent call last): File "c:\users\greyli\...\venv\lib\site-packages\flask\app.py", line 1953, in wsgi_app response = self.full_dispatch_request() File "c:\users\greyli\...\venv\lib\site-packages\flask\app.py", line 1454, in full_dispatch_request rv = self.handle_user_exception(e) File "c:\users\greyli\...\venv\lib\site-packages\flask\app.py", line 1452, in full_dispatch_request rv = self.dispatch_request() File "c:\users\greyli\...\app.py", line 318, in dispatch_request return self.view_functions[rule.endpoint](*req.view_args.values()) File "c:\users\greyli\...\venv\lib\site-packages\flask\helpers.py", line 781, in outer return async_to_sync(inner)(*args, **kwargs) File "c:\users\...\venv\lib\site-packages\asgiref\sync.py", line 203, in __call__ loop_future.result() File "C:\Users\greyli\.pyenv\pyenv-win\versions\3.8.0\lib\concurrent\futures\_base.py", line 432, in result return self.__get_result() File "C:\Users\greyli\.pyenv\pyenv-win\versions\3.8.0\lib\concurrent\futures\_base.py", line 388, in __get_result raise self._exception File "C:\Users\greyli\.pyenv\pyenv-win\versions\3.8.0\lib\concurrent\futures\thread.py", line 57, in run result = self.fn(*self.args, **self.kwargs) File "c:\users\greyli\...\venv\lib\site-packages\asgiref\sync.py", line 256, in _run_event_loop loop.close() File "C:\Users\greyli\.pyenv\pyenv-win\versions\3.8.0\lib\asyncio\proactor_events.py", line 679, in close signal.set_wakeup_fd(-1) ValueError: set_wakeup_fd only works in main threadactualizado a python 3.8.2, funcionó bien en mi servidor de Windows.
notas de la versión https://docs.python.org/release/3.8.2/whatsnew/changelog.html#python-3-8-2-final
problema bpo-34679: se corrigió asynci.ProactorEventLoop.close() ahora solo llama a signal.set_wakeup_fd() en el hilo principal.
Tuve que cambiar a Python 3.7 y luego comenzó a funcionar perfectamente.
Tengo exactamente el mismo error. Abrí el tema .
Si desea permanecer en la versión actual de Python, he encontrado la solución temporal que consiste en agregar las siguientes líneas a asgiref\__init__.py (como se sugirió en el problema ):
if sys.platform == "win32" and sys.version_info >= (3, 8, 0): asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())No solo Django, sino que también encontrará este error con Flask, ya que Flask 2.0.0 usa asgiref para admitir async .
Este error se solucionó en Python 3.9, por lo que hay dos soluciones:
app.py de Flask o manager.py de Django: # top of the file import sys, asyncio if sys.platform == "win32" and (3, 8, 0) <= sys.version_info < (3, 9, 0): asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())