Gunicorn: Agregar soporte de Windows

Creado en 1 may. 2013  ·  90Comentarios  ·  Fuente: benoitc/gunicorn

Esto está relacionado con las cosas que discutimos en PyCon.

Improvement FeaturCore help wanted - Mailing List - Platforwindows

Comentario más útil

@ jtan4nih esa actitud es innecesaria.

Python es multiplataforma, gunicorn no lo es.

Todos 90 comentarios

wip. planeado para R18.

Alguna actualización sobre eso:

  • El soporte de SOCKET está bastante terminado, se publicará una sucursal en línea la próxima semana

HACER:

manejar el inicio / parada / reinicio del servicio para usar gunicorn como un servicio completo de Windows. Está reemplazando de alguna manera el uso de señales en Unix.

el soporte finalmente ocurrirá en R20 . Crearé el nuevo RP para realizar un seguimiento del desarrollo de esta función la próxima semana.

Las cosas para arreglar son:

  • adaptar las notificaciones del trabajador a Windows
  • portar la señalización a Windows: recargar y volver a ejecutar
  • asegúrese de que los sockets se puedan heredar entre los procesos

¿Cuál es el progreso en la adición de soporte de Windows para gunicorn ?. O mejor dicho, ¿A qué distancia estás de R20 ? Tengo el mismo problema que el n. ° 587

Progreso lento. Quiero lanzar R19 con el trabajo roscado ahora. Publicaré una versión el lunes. el soporte de Windows llegará inmediatamente después.

¿Esta versión compatible con Windows está disponible en algún lugar?

El soporte de Windows estará en R20, así que supongo que pasará un tiempo hasta que guincorn tenga soporte para Windows ... Creé una máquina virtual con Ubuntu, y esto funciona para mí ...

Solo tengo curiosidad por saber algún progreso en esto. Como primer paso, ni siquiera necesita ser rápido; una gran ventaja será poder desarrollar con Gunicorn en Windows y enviarlo a un servidor Linux (por ejemplo, Heroku) sin cambiar la configuración.

@robertlagrant está en mi tarea. Primero necesito encontrar una licencia de Windows. R20 se lanzará en octubre,

¿Qué hay de las imágenes de VM en modern.ie? Esos son gratis y legales
El 22 de septiembre de 2014 a las 3:30 p.m., "Benoit Chesneau" [email protected] escribió:

@robertlagrant https://github.com/robertlagrant está en mi tarea hasta
el final del año. Primero necesito encontrar una licencia de Windows.

-
Responda a este correo electrónico directamente o véalo en GitHub
https://github.com/benoitc/gunicorn/issues/524#issuecomment -56372470.

Usé imágenes de modern.ie para probar una aplicación web en IE8 recientemente. Fácil de poner en marcha y funcionó muy bien.

@benoitc Si es necesario, creo que el PSF puede proporcionarle una licencia de Windows.

@benoitc ¿hay una rama WIP para esto? No soy un usuario de Windows, pero puedo echarle un vistazo a esto.

@berkerpeksag no todavía no: / deberíamos empezar uno lo antes posible.

como @cyberdelia dijo que podríamos pedir una licencia de ventanas en el PSF que el proyecto gunicorn podría usar para tal desarrollo. ¿Pensamientos?

Es una buena idea. https://www.python.org/psf/grants/ tiene toda la información sobre propuestas de subvenciones.

¿Alguna actualización sobre esto?

También estoy buscando actualizaciones para esto.

@berkerpeksag hablemos lo antes posible sobre IRC, solo hazme ping a veces antes, ya que estoy lejos de cualquier cosa instantánea en estos días :)

@benoitc ¿ alguna actualización sobre este?

@lealhugui , hasta donde yo sé, no ha habido ningún progreso desde entonces. De todos modos vine con un plan:

  1. deberíamos poner gunicorn dentro de un sistema CI que maneje ventanas para saber dónde falla
  2. inicie el puerto sobre la nueva biblioteca IPC (a veces el próximo mes) para comenzar el trabajo en Windows

Puedo esperar un lanzamiento a veces en marzo. Posiblemente antes, pero sin promesas :) El trabajo, por supuesto, puede ir más rápido si alguien que realmente conoce Windows mejor que yo (pista que no usé Windows desde 1995 ...) ¡puede ayudar!

@benoitc después de mediados de enero, puedo ayudar (básicamente pruebas, o cualquier cosa que necesite y podría ayudar).

@lealhugui gracias! Proporcionaré actualizaciones lo antes posible

Espero que las cosas vayan bien. ¿Seguimos siendo buenos con este lanzamiento en marzo?

@tannaalok poco probable. Con suerte, @benoitc puede publicar el trabajo de IPC y entonces tal vez sea posible el soporte de Windows. Tomará algún tiempo para que el trabajo de IPC aterrice, luego el resto del trabajo de Windows será descubierto, evaluado y trabajado. Es muy difícil de decir.

@tilgovi, el trabajo de IPC aterrizará en una sucursal a veces la semana que viene finalmente :)

Ahora sobre la versión de Windows, aquí está el plan que tengo en mente. Lo primero que debe hacer sería conectar Gunicorn a un CI de Windows para comenzar a notar problemas. Entonces hay 2 escenarios, ejecutar gunicorn en cygwin o ejecutar gunicorn en ventanas simples. Los dos pueden desencadenar resultados diferentes y deben probarse. Hasta donde yo sé, las cosas para hacer que Gunicorn sea portátil son las siguientes:

  • Manejo de señales : las señales funcionan de manera diferente bajo Windows y necesitamos encontrar una manera de exponer las siguientes características: http://docs.gunicorn.org/en/stable/signals.html
  • desove del trabajador : tal vez haya alguna diferencia en las ventanas. El trabajo de IPC eliminará el uso de un archivo temporal para verificar si los trabajadores están vivos reemplazándolo por una tubería. Esta parte debe hacerse compatible
  • apoyos de los trabajadores : todavía no estoy seguro de cómo se comportan los trabajadores de gevent, eventlet y tornado en windows. esta es una buena decisión para dividirlos fuera de Gunicorn de todos modos. Para que podamos mejorarlos. El trabajador de gthread puede funcionar de forma transparente si vamos a python 3. que será el caso.

¿Yo me perdí algo? Cualquier ayuda es bienvenida, yo mismo no soy un usuario diario de Windows. ¡Así que cualquier persona con experiencia en Windows que quiera tomar la iniciativa en esa parte para hacer de la plataforma de Windows un primer ciudadano en Gunicorn es bienvenida!

Python 3.5 agrega una característica útil para manejar señales en Windows: signal.set_wakeup_fd () ahora acepta un identificador de socket en Windows.
https://docs.python.org/dev/library/signal.html#signal.set_wakeup_fd

como @cyberdelia dijo que podríamos pedir una licencia de windows en el PSF

Microsoft ofrece licencias MSDN gratuitas para desarrolladores centrales de Python. Por ejemplo, como desarrollador principal, tengo acceso a Visual Studio 2015.

@haypo gracias. En realidad, eso también podría usarse para despertar al árbitro en Unix también ... Muy útil.

Si un desarrollador central puede ayudar, entonces será útil :) ¿Alguna idea sobre cómo solicitar uno cuando se trata de un proyecto externo?

También tiene WSL (Windows para Linux) para apuntar a la capacidad de Windows

¿Hay alguna forma de que una persona con conocimientos limitados de Linux y Gunicorn pueda ayudar a portar esto a Windows, o los problemas no son triviales?

¿Por qué está cerrado este problema? No encuentro información sobre cómo trabajar en Windows

Este problema aún está abierto.

@DominikDitoIvosevic todavía está abierto. A veces ofreceré algún tipo de hoja de ruta esta semana.

Me encontré con una lectura de compatibilidad hoy. Estaba mirando mi trabajo en el n. ° 1310. Manejé FD_CLOEXEC de manera diferente a como lo hacen las bibliotecas de systemd C. Eso me llevó a PEP 446 , pensando en el comportamiento de fork y recordando que no hay fork en Windows.

Para comenzar, aquí hay algunas cosas que necesitamos en la hoja de ruta:

  • Configurar CI
  • Reemplaza os.fork , probablemente con multiprocessing.Process
  • Reemplazar WorkerTemp con multiprocessing.Pipe
  • Agregar versiones de compatibilidad de los ayudantes de herencia FD
  • (encuentra otras cosas, probablemente más pequeñas, y arréglalas)

Atascado con Windows en el trabajo, esto realmente me ayudaría. ¡Esperando mucho esta característica!

Reconozco que esto puede no ser una respuesta, pero encuentro que la camarera es realmente buena para
Windows.

2016-08-08 22:39 GMT + 03: 00 hirolau [email protected] :

Atascado con Windows en el trabajo, esto realmente me ayudaría. Muy anticipado
¡Esta característica!

-
Estás recibiendo esto porque estás suscrito a este hilo.
Responda a este correo electrónico directamente, véalo en GitHub
https://github.com/benoitc/gunicorn/issues/524#issuecomment -238351654,
o silenciar el hilo
https://github.com/notifications/unsubscribe-auth/AALnfBAXBrmPlU1JPx6RXI0vFQPLmBlyks5qd4XhgaJpZM4AnyCw
.

Atentamente,
Gleb

@ chester89, esto seguramente no es realmente apropiado allí ....

@hirolau Acabo de obtener una licencia de desarrollador de MSDN el mes pasado para poder probarla fácilmente en Windows. Con suerte, @berkerpeksag podrá ayudar con las pruebas. Elaboraré un plan para asegurarnos de tenerlo disponible a veces el próximo mes :)

@benoitc - ¡golpe desvergonzado!

Por lo general, uso Windows, por lo que el trabajo de gunicorn en Windows será muy apreciado. Gracias !
¿Tienes algún plan para cuando estará listo?

¿Alguna noticia sobre esto? nos vemos obligados a utilizar Windows en producción. Si el trabajo se ha estancado, ¿podría compartir el borrador del plan? ¡salud!

@cmorgan La misma situación aquí. ¿Alguien tiene actualizaciones sobre este tema?

@benoitc alguna noticia sobre esto?

Hola, todos
¿Alguna noticia sobre esto?

Estoy seguro de que se agregarán actualizaciones al problema. No es necesario solicitar actualizaciones.

Hola a todos,

Lamento no haber respondido antes. He estado bastante ocupado estos días. Así que parece que hay mucha gente esperando esta función, ya es hora de hacerla. Yo redactaré un plan el domingo al respecto y haré para encontrar una manera de hacerlo realidad :)

Creo que dividir esto en tareas más pequeñas y procesables podría ser la mejor manera de avanzar.

Como tal, he presentado # 1467 para la parte "configurar CI" con PR # 1468 para agregar una configuración de AppVeyor. Aquí se puede ver un ejemplo de ejecución de prueba:
https://ci.appveyor.com/project/edmorley/gunicorn/build/windows-ci.18

Además de los cambios más importantes mencionados en comentarios anteriores (señales, IPC del trabajador, manejo de la falta de bifurcación, etc.), lo siguiente debe resolverse antes de que las pruebas se ejecuten:

@edmorley gracias, lo

¿Cuándo puedo respetar esta función?? Este problema comenzó hace unos cuatro años。

Hola,
También estamos buscando tener esta funcionalidad, ¿tenemos alguna idea de cuándo podría comenzar a suceder?

Hola, ¿cuándo se manejará esto? :)

Si alguien quiere ayudar, abordar cualquiera de los problemas que @edmorley ha encontrado serían PR útiles.

Tenga en cuenta que algunas cosas pueden cambiar más drásticamente para que esto sea posible.

No hay una línea de tiempo para esto en este momento. Si desea ayudar, IRC podría ser el mejor lugar para conversar sobre ello o abrir problemas más pequeños para elementos de trabajo individuales.

Suscríbase a este número si desea recibir una notificación sobre el progreso. En este momento no hay una línea de tiempo.

FWIW, Gunicorn funciona en Cygwin en Windows. Sé que no es de gran ayuda, pero ahí está ...

@Zorlin No puedo hacer que funcione con Cygwin en Windows. Intenté hacer el ejemplo de la documentación oficial.

$ pip install gunicorn
$ cat myapp.py
  def app(environ, start_response):
    data = b"Hello, World!\n"
    start_response("200 OK", [
        ("Content-Type", "text/plain"),
        ("Content-Length", str(len(data)))
    ])
    return iter([data])
$ gunicorn -w 4 myapp:app

Sigo recibiendo este error en Cygwin

<project-name>\flask\lib\site-packages\gunicorn\util.py", line 9, in <module>
    import fcntl
ModuleNotFoundError: No module named 'fcntl'

esto también se ejecuta en el subsistema de Windows 10, por lo que tal vez ya no sea necesario.

Para admitir Windows de forma nativa, necesitamos lo siguiente:

  • [] vaya a python3 para simplificar el código
  • [] usa CreateProcessW para generar un proceso en lugar de os.fork (¿quizás reutilizando la abstracción _winapi usada en multiprocesamiento?
  • [] sockets creo que ya hay un código portado para asyncio y disponible en python 3 que se puede usar para gthreads
  • [] permisos. en su lugar, deberíamos admitir la forma en que Windows permite el lanzamiento de los servicios para demonizar. también los privilegios deben manejarse de manera diferente

(¿quizás reutilizando la abstracción _winapi utilizada en multiprocesamiento?

Por cierto, el multiprocesamiento usa CreateProcess en popen_spawn_win32.py y no es parte del proceso de compatibilidad con versiones anteriores de Python ya que es un módulo interno.

¡Hola, todos! ¿Cómo está avanzando en este tema? ¿Tenemos a la vista algunas fechas límite para su finalización? ¡Gracias!

@bartmika no. No habrá una fecha límite. Tenemos mucho trabajo por hacer, como señaló Benoitc. Damos la bienvenida a la ayuda. Como dije anteriormente, suscríbase a este número para recibir actualizaciones. Actualizaremos cuando haya algo para compartir.

Gracias @tilgovi ,

Me gustaría discutir la posibilidad de ofrecer una recompensa por cerrar este problema. Que un desarrollador de Gunicorn se comunique conmigo en bart [arroba] simalam.com

¡Gracias!

@bartmika lo siento, fue una semana ocupada. Me pondré en contacto contigo mañana una vez que haya estado en contacto con @tilgovi & @berkerpeksag . De todos modos es una buena idea.

@benoitc solo quería verificar el estado de Gunicorn para Windows. Veo que aún no hay una fecha de lanzamiento, pero quería ver si hay algo beta que pueda probar en Windows.

El trabajo de

@bartmika me han desviado estos días. Intentaré configurar un plan y hacerlo público a finales de esta semana.

Entonces, ¿hay ahora soporte para Windows ?. Es diciembre

¡Estoy deseando que llegue! Es enero.

@benoitc ¿ Alguna actualización?

Hola,

Me estoy registrando nuevamente, ¿hay algo nuevo?

Gracias
Miguel

Hola

¿Puedo usar Apache Airflow en Windows ahora?

Gracias
Sudhakar

Hola,

Estoy intentando con el siguiente comando pero obtengo este error. ¿Puedes ayudar en esto?

(flaskms) C:\Users\Socrates>gunicorn --bind 0.0.0.0:8000 hello-world:app
Traceback (most recent call last):
  File "c:\programdata\anaconda3\lib\runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "c:\programdata\anaconda3\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "C:\ProgramData\Anaconda3\Scripts\gunicorn.exe\__main__.py", line 5, in <module>
  File "c:\programdata\anaconda3\lib\site-packages\gunicorn\app\wsgiapp.py", line 10, in <module>
    from gunicorn.app.base import Application
  File "c:\programdata\anaconda3\lib\site-packages\gunicorn\app\base.py", line 12, in <module>
    from gunicorn import util
  File "c:\programdata\anaconda3\lib\site-packages\gunicorn\util.py", line 9, in <module>
    import fcntl
ModuleNotFoundError: No module named 'fcntl'

Como truco, creé el archivo fcntl.py con el contenido a continuación, lo compilé como archivo fcntl.cpython-36.pyc , lo coloqué en la carpeta __pycache__ , reinicié el terminal y ejecuté el comando gunicorn --bind 0.0.0.0:8000 hello-world:app , pero aún así no tuve suerte.

contenido fcntl.py:

FD_CLOEXEC = 1
F_DUPFD = 0
F_GETFD = 1
F_SETFD = 2
F_GETFL = 3
F_SETFL = 4
F_GETOWN = 5
F_SETOWN = 6
F_GETLK = 7
F_SETLK = 8
F_SETLKW = 9
F_RGETLK = 10
F_RSETLK = 11
F_CNVT = 12
F_RSETLKW = 13
F_RDLCK = 1
F_WRLCK = 2
F_UNLCK = 3
F_UNLKSYS = 4

def fcntl(fd, op, arg=0):
    return 0

def ioctl(fd, op, arg=0, mutable_flag=True):
    if mutable_flag:
        return 0
    else:
        return ""

def flock(fd, op):
    return

def lockf(fd, operation, length=0, start=0, whence=0):
    return

Obtuve esto de https://stackoverflow.com/questions/11087682/does-gunicorn-run-on-windows

¿Sería útil si alguien puede sugerir la mejor alternativa de Gunicorn para Windows por el momento?

Actualización: estoy usando camarera ahora, muy buena alternativa :)

Han pasado 5 años y ¿alguna actualización sobre este? Gracias.

@hsluoyz lo último que pasó públicamente fue el 16 de marzo de este año, creo.

Hola,
¿Aún no has conseguido que la bifurcación funcione en Windows?

Hola,

Me interesaría trabajar en este ticket.
¿Cuál es el estado actual del puerto?

¿Cuál es el estado actual del puerto?

PR # 1468 se fusionó hace un año para agregar pruebas en AppVeyor en Windows, pero la cuenta de AppVeyor debe activarse antes de que se ejecute.

Después de eso, alguien necesita iterar a través de las fallas que ocurren en las ejecuciones de prueba de Windows.

@edmorley Hoy me

@Sweenpet no mucho todavía. Lo primero que debe hacer es mirar los resultados de la prueba y crear tickets a partir de ellos.

También debemos decidir sobre el alcance:

  • [] ¿No es WSL? ¿Qué le falta a iy?
  • [] soporte cygwin?
  • [] soporte nativo: qué tipo de supervisión queremos. Supongo que queremos que se ejecute como un servicio.

Propongo discutir eso en el IRC a veces mañana si quieres.

Instalé appveyor en el repositorio:

https://ci.appveyor.com/project/benoitc/gunicorn

@benoitc , tengo la aplicación (examples / flaskapp.py) y todas las pruebas ejecutándose en WSL, para Ubuntu 18.04 y Python 3.6.5. Es de suponer que debería funcionar para todas las demás versiones especificadas en el archivo tox. El hecho de que se ejecute en WSL resolvería la mayoría de los problemas de los usuarios de Windows, me imagino, a menos que no se ejecuten en Windows 10. ¿Cygwin todavía se usa ampliamente?

Feliz de tener una discusión mañana sobre el soporte nativo en Windows, ¿a qué hora conviene?

También creará esos tickets mañana, parece ser principalmente alrededor de módulos y sockets nativos de Linux.

FWIW, uso cygwin en Windows

Si Python no se ejecuta en Windows correctamente (por ejemplo, psycopg2, weasyprint y lo que no), ¿por qué diablos Python sigue afirmando que es multiplataforma? Hasta ahora, ni siquiera funciona correctamente en Windows 10.

@ jtan4nih esa actitud es innecesaria.

Python es multiplataforma, gunicorn no lo es.

lo siento, he sido horriblemente desviado. Diría que si alguien quiere ejecutar gunicorn de forma nativa en Windows, estaría encantado de aceptar cualquier parche y responder a cualquier pregunta.

ver cs01 / gdbgui # 18, tal vez ayude

Han pasado 7 años, ¿y suerte para que esto suceda?

Es posible que tenga algún ciclo que gaste en él durante marzo. Tendré que encontrar un
forma de ejecutar Windows en algún lugar. ya puedes ejecutarlo en la terminal
de todas formas.

también cualquiera que realmente use Windows puede ayudar en ese tema.

Prueba waitress .
El diseño de gunicorn es aprovechar los núcleos Unix y similares a Unix para formar un servidor web.

mirar esos tutoriales de youtube sobre cómo implementar django en heroku usando gunicorn realmente me hace preguntarme cómo es posible que hagan eso, mientras tanto, todavía estoy atrapado con el problema de gunicorn jajaja

Prueba waitress .
El diseño de gunicorn es aprovechar los núcleos Unix y similares a Unix para formar un servidor web.

Waitress no admite el multiprocesamiento adecuado.

¿Existe una idea aproximada de cómo se podría hacer en Windows para admitir el multiprocesamiento adecuado?
¿Sabemos cuáles son los principales obstáculos hasta ahora para que esto se implemente?

Es posible que tenga algún ciclo que gaste en él durante marzo. Necesitaré encontrar una forma de ejecutar Windows en algún lugar. ya puedes ejecutarlo en la terminal de todos modos.

¿Podría la máquina virtual de desarrollo de Win10 ser una solución para que ejecute Windows y verifique la compatibilidad con gunicorn?

Quizás podamos usar pywin32 para Windows en lugar de fnctl en Windows, parece que tienen capacidades de bloqueo de archivos.

¿Fue útil esta página
0 / 5 - 0 calificaciones