Gunicorn: Adicionar suporte para Windows

Criado em 1 mai. 2013  ·  90Comentários  ·  Fonte: benoitc/gunicorn

Isso está relacionado às coisas que discutimos na PyCon

Improvement FeaturCore help wanted - Mailing List - Platforwindows

Comentários muito úteis

@ jtan4nih essa atitude é desnecessária.

Python é uma plataforma cruzada, o gunicorn não.

Todos 90 comentários

limpe. planejado para R18.

Algumas atualizações sobre isso:

  • O suporte do SOCKET está pronto, uma filial será postada online na próxima semana

PENDÊNCIA:

lidar com o serviço iniciar / parar / reiniciar para usar o gunicorn como um serviço completo do Windows. Ele está substituindo de alguma forma o uso de sinais no UNIX.

o suporte vai finalmente acontecer no R20 . Vou criar o novo PR para acompanhar o desenvolvimento desse recurso na próxima semana.

Coisas a corrigir são:

  • adaptar notificações de trabalho às janelas
  • transferir a sinalização para o windows: recarregar e reexecutar
  • certifique-se de que os soquetes podem ser herdados entre os processos

Qual é o progresso na adição de suporte a janelas para gunicorn ?. Ou melhor, a que distância você está do R20 ? Estou tendo o mesmo problema que # 587

Progresso lento. Eu quero lançar o R19 com o trabalho encadeado agora. Vou lançar uma versão na segunda-feira. o suporte das janelas chegará logo em seguida.

Esta versão com suporte do Windows está disponível em algum lugar?

O suporte do Windows será em R20, então acho que vai demorar um pouco até que o guincorn tenha suporte para Windows ... Eu criei uma VM com o Ubuntu, e isso funciona para mim ...

Apenas curioso quanto a qualquer progresso nisso. Para começar, nem precisa ser rápido; uma grande vantagem será apenas poder desenvolver com Gunicorn no Windows e enviar para um servidor Linux (por exemplo, Heroku) sem alterar a configuração.

@robertlagrant está na minha lista de tarefas. Eu preciso encontrar uma licença do Windows primeiro. R20 será lançado em outubro,

Que tal as imagens de VM em modern.ie? Esses são gratuitos e legais
Em 22 de setembro de 2014, às 15h30, "Benoit Chesneau" [email protected] escreveu:

@robertlagrant https://github.com/robertlagrant está em minhas tarefas até
o fim do ano. Eu preciso encontrar uma licença do Windows primeiro.

-
Responda a este e-mail diretamente ou visualize-o no GitHub
https://github.com/benoitc/gunicorn/issues/524#issuecomment -56372470.

Usei imagens modern.ie para testar um aplicativo da web no IE8 recentemente. Fácil de começar e funcionou muito bem.

@benoitc Se necessário, acredito que o PSF pode fornecer uma licença do Windows.

@benoitc existe um branch WIP para isso? Não sou um usuário do Windows, mas posso dar uma olhada nisso.

@berkerpeksag não, ainda não: / devemos realmente começar um o mais

como @cyberdelia disse que poderíamos pedir uma licença de windows no PSF que o projeto gunicorn poderia usar para tal desenvolvimento. Pensamentos?

É uma boa ideia. https://www.python.org/psf/grants/ contém todas as informações sobre propostas de subsídios.

Alguma atualização sobre isso?

Também estou procurando atualizações para isso.

@berkerpeksag vamos conversar o mais

@benoitc alguma atualização sobre este?

@lealhugui , pelo que eu sei, não houve nenhum progresso desde então. De qualquer forma, eu vim com um plano:

  1. devemos colocar o gunicorn dentro de um sistema de CI que lida com janelas para saber onde ele falha
  2. inicie a porta sobre a nova biblioteca IPC (às vezes no próximo mês) para iniciar o trabalho no Windows

Posso esperar um lançamento às vezes em março. Possivelmente mais cedo, mas sem promessas :) O trabalho pode, é claro, ir mais rápido se alguém que realmente conhece o Windows melhor do que eu (dica que eu não uso o Windows desde 1995 ...) pode ajudar!

@benoitc depois de meados de janeiro, posso ajudar (basicamente testando ou qualquer coisa que você precise e eu poderia ajudar).

@lealhugui obrigado! Vou fornecer atualizações o mais rápido possível

Espero que as coisas estejam ocorrendo bem. Ainda estamos bem com este lançamento em março?

@tannaalok improvável. Esperançosamente, @benoitc pode publicar o trabalho do IPC e então talvez o suporte do Windows seja possível. Levará algum tempo para que o trabalho do IPC seja concluído e, em seguida, o restante do trabalho do Windows será descoberto, triado e trabalhado. É muito difícil dizer.

@tilgovi, o trabalho do IPC vai

Agora sobre a versão do Windows, aqui está o plano que tenho em mente. A primeira coisa a fazer seria conectar o Gunicorn a um CI do Windows para começar a observar os problemas. Existem então 2 cenários, executando gunicorn em cygwin ou executando gunicorn em janelas simples. Os dois podem desencadear resultados diferentes e precisam ser testados. Pelo que eu sei, as coisas para tornar o gunicorn portátil são as seguintes:

  • tratamento de sinais : os sinais funcionam de maneira diferente no Windows e precisamos encontrar uma maneira de expor os seguintes recursos: http://docs.gunicorn.org/en/stable/signals.html
  • desova de trabalhadores : talvez haja alguma diferença nas janelas. O trabalho do IPC removerá o uso de arquivo temporário para verificar se os trabalhadores estão vivos substituindo-o por um tubo. Esta parte deve ser compatível
  • suporte do trabalhador : ainda não tenho certeza de como se comportam os trabalhadores gevent, eventlet e tornado nas janelas. esta é uma boa chamada para separá-los fora do gunicorn de qualquer maneira. Assim, podemos atualizá-los separadamente. O trabalhador gthread pode trabalhar de forma transparente se formos para o python 3. que será o caso.

Eu perdi alguma coisa? Qualquer ajuda é bem-vinda, eu não sou um usuário diário do windows. Portanto, qualquer pessoa experiente em windows que queira assumir a liderança nessa parte para fazer da plataforma windows um primeiro cidadão em gunicorn é bem-vinda!

Python 3.5 adiciona um recurso útil para manipular sinais no Windows: signal.set_wakeup_fd () agora aceita um identificador de soquete no Windows.
https://docs.python.org/dev/library/signal.html#signal.set_wakeup_fd

como @cyberdelia disse que poderíamos pedir licença de windows no PSF

A Microsoft oferece licenças gratuitas do MSDN para os desenvolvedores principais do Python. Por exemplo, como desenvolvedor principal, tenho acesso ao Visual Studio 2015.

@haypo obrigado. Na verdade, isso também poderia ser usado para acordar o árbitro no Unix também ... Muito útil.

Se um desenvolvedor principal puder ajudar, isso será útil :) Alguma idéia de como pedir um quando for um projeto externo?

Você também tem o WSL (Windows para Linux) para direcionar para o recurso do Windows

Existe alguma maneira de uma pessoa com conhecimento limitado de linux e gunicorn ajudar a portar isso para o Windows, ou os problemas não são triviais?

Por que este problema foi encerrado? Não consigo encontrar nenhuma informação sobre como trabalhar no Windows

Este problema ainda está aberto.

@DominikDitoIvosevic ainda está aberto. Vou fornecer algum tipo de roteiro às vezes esta semana.

Eu tropecei em alguma leitura de compatibilidade hoje. Eu estava olhando meu trabalho no # 1310. Eu lidei com FD_CLOEXEC de forma diferente do que as bibliotecas C do systemd fazem. Isso me levou ao PEP 446 , pensando sobre o comportamento de fork e lembrando que não existe fork no Windows.

Para começar, aqui estão algumas coisas que precisamos no roteiro:

  • Configurar CI
  • Substitua os.fork , provavelmente por multiprocessing.Process
  • Substitua WorkerTemp por multiprocessing.Pipe
  • Adicionar versões de compatibilidade de ajudantes de herança FD
  • (encontre outras coisas, provavelmente mais pequenas, e conserte-as)

Preso com o Windows no trabalho, isso realmente me ajudaria. Esperando muito por esse recurso!

Eu reconheço que isso pode não ser uma resposta, mas acho que garçonete é realmente boa para
Janelas.

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

Preso com o Windows no trabalho, isso realmente me ajudaria. Altamente antecipando
esse recurso!

-
Você está recebendo isto porque está inscrito neste tópico.
Responda a este e-mail diretamente, visualize-o no GitHub
https://github.com/benoitc/gunicorn/issues/524#issuecomment -238351654,
ou silenciar o tópico
https://github.com/notifications/unsubscribe-auth/AALnfBAXBrmPlU1JPx6RXI0vFQPLmBlyks5qd4XhgaJpZM4AnyCw
.

Com os melhores cumprimentos,
Gleb

@ chester89 isso certamente não é apropriado lá ....

@hirolau acabei de obter uma licença de desenvolvedor MSDN no mês passado para que possa testá-la facilmente no Windows. Esperançosamente @berkerpeksag poderá ajudar nos testes. Vou esboçar um plano para que possamos ter certeza de tê-lo disponível algumas vezes no próximo mês :)

@benoitc - colisão sem vergonha!

Normalmente estou usando janelas, então o trabalho de gunicorn nas janelas será muito apreciado. Obrigado !
Você tem planos de quando estará pronto?

Alguma novidade sobre isso? somos forçados a usar o Windows na produção. Se o trabalho estiver paralisado, você poderia compartilhar o plano preliminar? Felicidades!

@cmorgan A mesma situação aqui. Alguém tem atualizações sobre este problema?

@benoitc alguma notícia sobre isso?

Olá pessoal
Alguma novidade sobre isso?

Tenho certeza de que quaisquer atualizações serão adicionadas ao problema. Não há necessidade de pedir atualizações.

Olá a todos,

Desculpe por não ter respondido antes. Tenho andado muito ocupado estes dias. Portanto, parece que há muitas pessoas esperando por esse recurso, é hora de fazê-lo. Vou traçar um plano até domingo sobre isso e vou encontrar uma maneira de fazer isso acontecer :)

Acredito que dividir isso em tarefas menores e mais acionáveis ​​pode ser a melhor maneira de avançar.

Como tal, solicitei # 1467 para a parte "configurar CI" com PR # 1468 para adicionar uma configuração AppVeyor. Um exemplo de execução de teste pode ser visto aqui:
https://ci.appveyor.com/project/edmorley/gunicorn/build/windows-ci.18

Além das mudanças maiores mencionadas nos comentários anteriores (sinais, IPC do trabalhador, manipulação da falta de bifurcação, etc.), o seguinte precisa ser resolvido antes que os testes sejam executados:

@edmorley obrigado, veremos isso o mais

Quando posso respeitar esta função? Este problema começou há cerca de quatro anos。

Oi,
Queremos ter essa funcionalidade também, temos ideia de quando isso pode começar a acontecer?

Olá, quando isso vai ser resolvido? :)

Se alguém quiser ajudar, lidar com qualquer um dos problemas encontrados por @edmorley seriam

Esteja ciente de que algumas coisas podem mudar de forma mais dramática para tornar isso possível.

Não há um cronograma para isso agora. Se você quiser ajudar, o IRC pode ser o melhor lugar para conversar sobre isso ou abrir questões menores para itens de trabalho individuais.

Inscreva-se nesta edição se quiser ser notificado sobre o andamento. No momento, não há linha do tempo.

FWIW, Gunicorn funciona em Cygwin no Windows. Sei que não ajuda muito, mas aí está ...

@Zorlin Não consigo fazê-lo funcionar com o Cygwin no Windows. Eu tentei fazer o exemplo da documentação 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

Continuo recebendo este erro no Cygwin

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

isso também é executado no subsistema do Windows 10, então talvez não seja mais necessário?

Para oferecer suporte nativo ao Windows, precisamos do seguinte:

  • [] vá para python3 para simplificar o código
  • [] use CreateProcessW para gerar um processo em vez de os.fork (talvez reutilizando a abstração _winapi usada no multiprocessamento?
  • [] sockets, acredito que já exista algum código portado para asyncio e disponível em python 3 que pode ser usado para gthreads
  • [] permissões. devemos apoiar, em vez disso, a maneira como o Windows permite a inicialização dos serviços para daemonizar. também os privilégios devem ser tratados de forma diferente

(talvez reutilizando a abstração _winapi usada no multiprocessamento?

A propósito, o multiprocessamento usa CreateProcess em popen_spawn_win32.py e não faz parte do processo de compatibilidade com versões anteriores do Python, pois é um módulo interno.

Olá pessoal! Como está o progresso com relação a esse problema? Temos alguma data prevista para a conclusão? Obrigado!

@bartmika no. Não haverá uma data alvo. Temos muito trabalho a fazer, conforme Benoitc descreveu. Agradecemos a ajuda. Como eu disse acima, inscreva-se nesta edição para obter atualizações. Nós iremos atualizar quando houver algo para compartilhar.

Obrigado @tilgovi ,

Eu gostaria de discutir potencialmente colocar uma recompensa no fechamento desta questão. Um desenvolvedor da Gunicorn pode entrar em contato comigo em bart [at] simalam.com

Obrigado!

@bartmika sorry foi uma semana ocupada. Entrarei em contato com você amanhã assim que entrar em contato com @berkerpeksag . De qualquer maneira, boa ideia.

@benoitc só queria verificar o status do Gunicorn para Windows. Vejo que ainda não há uma data de lançamento, mas gostaria de ver se há algo beta que eu possa testar no Windows.

O trabalho de

@bartmika, tenho sido

Então, agora existe um suporte para Windows ?. É dezembro

Estou ansioso por isso! É janeiro.

@benoitc Alguma atualização?

Oi,

Apenas checando de novo, há algo novo?

Obrigado
Mike

Oi

Posso usar o Apache Airflow no Windows agora?

Obrigado
Sudhakar

Oi,

Estou tentando o seguinte comando, mas recebo este erro. Você pode ajudar nisso?

(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 um hack, criei fcntl.py file com o conteúdo abaixo, compilei-o como fcntl.cpython-36.pyc file, coloquei-o na pasta __pycache__ , reiniciei o terminal e executei o comando gunicorn --bind 0.0.0.0:8000 hello-world:app , mas ainda sem sorte.

conteúdo 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

Consegui isso em https://stackoverflow.com/questions/11087682/does-gunicorn-run-on-windows

Seria útil se alguém pudesse sugerir a melhor alternativa Gunicorn para Windows por enquanto?

Atualização: estou usando garçonete agora, alternativa muito boa :)

Já se passaram 5 anos e alguma atualização sobre este? Obrigado.

@hsluoyz a última coisa que aconteceu publicamente foi em 16 de março deste ano, eu acredito.

Oi,
Ainda não teve sorte em fazer o garfo funcionar em janelas?

Oi,

Eu estaria interessado em trabalhar neste tíquete.
Qual é o estado atual do porto?

Qual é o estado atual do porto?

PR # 1468 foi fundido há um ano que adicionou testes no AppVeyor no Windows, mas a conta do AppVeyor precisa ser ativada antes de ser executada.

Depois disso, alguém precisa iterar através das falhas que ocorrem nas execuções de teste do Windows.

@edmorley , cuidarei do appveyor hoje.

@Sweenpet nada muito ainda. A primeira coisa a fazer é examinar os resultados do teste e criar a partir deles.

Também precisamos decidir sobre o escopo:

  • [] não é WSL? O que falta para iy?
  • [] suporte cygwin?
  • [] suporte nativo: que tipo de supervisão a gente quer. Acho que queremos que ele funcione como um serviço.

Proponho discutir isso no IRC às vezes amanhã, se você quiser?

Eu instalei o appveyor no repositório:

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

@benoitc , tenho o aplicativo (examples / flaskapp.py) e todos os testes em execução no WSL, para Ubuntu 18.04 e Python 3.6.5. Presumivelmente, ele deve funcionar para todas as outras versões especificadas no arquivo tox. O fato de ser executado em WSL resolveria a maioria dos problemas dos usuários do Windows que eu imagino, a menos que eles não estejam executando no Windows 10. O Cygwin ainda é amplamente usado?

Feliz por ter uma discussão amanhã sobre o suporte nativo no Windows, que horas é melhor?

Irá criar esses tickets amanhã também, parece ser principalmente em torno de módulos e sockets nativos do Linux.

FWIW, eu uso cygwin no windows

Se o Python não funciona no Windows corretamente (por exemplo, psycopg2, weasyprint e outros), por que diabos o Python ainda afirma que é multiplataforma? Até agora, nem mesmo funciona corretamente no Windows 10.

@ jtan4nih essa atitude é desnecessária.

Python é uma plataforma cruzada, o gunicorn não.

desculpe, eu fui terrivelmente desviado. Eu diria que se alguém quiser rodar nativamente gunicorn no windows ficaria feliz em aceitar qualquer patch e responder a todas as perguntas.

veja cs01 / gdbgui # 18, talvez ajude

Já se passaram 7 anos, e alguma sorte em fazer isso acontecer?

Eu posso ter algum ciclo que você gaste nisso durante o mês de março. Vou precisar encontrar um
maneira de executar o Windows em algum lugar. você já pode executá-lo no terminal
qualquer forma.

também qualquer pessoa que realmente use o Windows pode ajudar nesse assunto.

Experimente waitress .
O design de gunicorn é tirar vantagem dos kernels Unix e semelhantes ao Unix para formar um servidor web.

olhar para aqueles tutoriais do youtube sobre como implantar django no heroku usando gunicorn realmente me faz pensar como é possível para eles fazerem isso, enquanto isso eu ainda estou preso com o problema do gunicorn lol

Experimente waitress .
O design de gunicorn é tirar vantagem dos kernels Unix e semelhantes ao Unix para formar um servidor web.

A garçonete não oferece suporte ao multiprocessamento adequado.

Existe uma ideia aproximada de como isso poderia ser feito no Windows para oferecer suporte ao multiprocessamento adequado?
Sabemos quais são os principais obstáculos até agora para que isso seja implementado?

Eu posso ter algum ciclo que você gaste nisso durante o mês de março. Precisarei encontrar uma maneira de executar o Windows em algum lugar. você já pode executá-lo no terminal de qualquer maneira.

O Win10 dev VM's poderia ser uma solução para você rodar o Windows e verificar a compatibilidade do gunicorn?

Talvez possamos usar pywin32 para windows em vez de fnctl no windows, parece que eles têm recursos de bloqueio de arquivo.

Esta página foi útil?
0 / 5 - 0 avaliações