Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

545
Vistas
ValueError: set_wakeup_fd solo funciona en el subproceso principal en Windows en Python 3.8 con Django 3.0.2 o Flask 2.0.0

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 profesional de Windows 10, 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 thread

Ademá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 thread
over 4 years ago · Santiago Trujillo
4 Respuestas
Responde la pregunta

0

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())
over 4 years ago · Santiago Trujillo Denunciar

0

actualizado 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.

over 4 years ago · Santiago Trujillo Denunciar

0

Tuve que cambiar a Python 3.7 y luego comenzó a funcionar perfectamente.

over 4 years ago · Santiago Trujillo Denunciar

0

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:

  • Actualizar a Python 3.9
  • Agregue la corrección temporal de la siguiente manera (basada en la respuesta de Dennis B ) a su script de entrada, por ejemplo, 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())
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda