Gunicorn: Ajouter la prise en charge de Windows

Créé le 1 mai 2013  ·  90Commentaires  ·  Source: benoitc/gunicorn

Ceci est lié aux choses dont nous avons discuté à PyCon

Improvement FeaturCore help wanted - Mailing List - Platforwindows

Commentaire le plus utile

@jtan4nih cette attitude est déplacée.

Python est multiplateforme, pas gunicorn.

Tous les 90 commentaires

essuyer. prévu pour R18.

Quelques mises à jour à ce sujet :

  • Le support de SOCKET est bien fait, une branche sera mise en ligne la semaine prochaine

À FAIRE:

gérer le démarrage/l'arrêt/le redémarrage du service pour utiliser gunicorn comme un service Windows complet. Il remplace en quelque sorte l'utilisation de signaux sous unix.

le support se fera enfin en R20 . Je vais créer le nouveau PR pour suivre le développement de cette fonctionnalité la semaine prochaine.

Les choses à corriger sont :

  • adapter les notifications des travailleurs aux fenêtres
  • porter la signalisation vers windows : recharger et reexec
  • s'assurer que les sockets peuvent être héritées entre les processus

Quels sont les progrès sur l'ajout de la prise en charge de Windows pour gunicorn ?. Ou plutôt A quelle distance êtes-vous du R20 ? J'ai le même problème que le #587

Progression lente. Je veux sortir R19 avec le travail fileté maintenant. Je pousserai une version lundi. le support windows arrivera juste après.

Cette version prise en charge par Windows est-elle disponible quelque part ?

La prise en charge de Windows sera dans R20, donc je suppose qu'il faudra un certain temps avant que guincorn ait la prise en charge de Windows... J'ai créé une machine virtuelle avec Ubuntu, et cela fonctionne pour moi.....

Juste curieux de savoir s'il y a des progrès dans ce domaine. En tant que premier passage, il n'a même pas besoin d'être rapide ; un gros avantage sera juste de pouvoir développer avec Gunicorn sur Windows et pousser vers un serveur Linux (ex Heroku) sans changer de config.

@robertlagrant c'est sur mon todo. Je dois d'abord trouver une licence Windows. R20 sortira en octobre,

Qu'en est-il des images VM sur modern.ie ? Ceux-ci sont gratuits et légaux
Le 22 septembre 2014 à 15h30, "Benoit Chesneau" [email protected] a écrit :

@robertlagrant https://github.com/robertlagrant c'est sur mon todo jusqu'à
la fin de l'année. Je dois d'abord trouver une licence Windows.

-
Répondez directement à cet e-mail ou consultez-le sur GitHub
https://github.com/benoitc/gunicorn/issues/524#issuecomment-56372470 .

J'ai récemment utilisé des images modern.ie pour tester une application Web dans IE8. Facile à démarrer et a très bien fonctionné.

@benoitc Si besoin, je pense que la PSF peut vous fournir une licence Windows.

@benoitc y a-t-il une branche WIP pour cela ? Je ne suis pas un utilisateur de Windows, mais je peux y jeter un œil.

@berkerpeksag non pas encore :/ nous devrions vraiment en commencer un dès que possible.

comme @cyberdelia a dit que nous pourrions demander une licence de fenêtres à la PSF que le projet gunicorn pourrait utiliser pour un tel développement. Les pensées?

C'est une bonne idée. https://www.python.org/psf/grants/ contient toutes les informations sur les propositions de subvention.

Des mises à jour à ce sujet ?

Je recherche également des mises à jour à ce sujet.

@berkerpeksag discutons dès que possible sur IRC, envoyez-moi un ping parfois avant car je suis loin de tout instant ces jours-ci :)

@benoitc une mise à jour sur celui-ci?

@lealhugui pour autant que je sache, il n'y a eu aucun progrès depuis. Quoi qu'il en soit, je suis venu avec un plan:

  1. nous devrions mettre gunicorn dans un système CI qui gère les fenêtres pour savoir où il échoue
  2. démarrer le port sur la nouvelle bibliothèque IPC (parfois le mois prochain) pour commencer le travail sur Windows

Je peux m'attendre à une sortie parfois en mars. Peut-être plus tôt mais aucune promesse :) Le travail peut bien sûr aller plus vite si quelqu'un qui connaît réellement Windows mieux que moi (indice que je n'ai pas utilisé Windows depuis 1995...) peut aider !

@benoitc après la mi-janvier, je peux aider (essentiellement des tests, ou tout ce dont vous avez besoin et je pourrais vous aider).

@lealhugui merci ! Je fournirai des mises à jour dès que possible

J'espère que tout va bien. Sommes-nous toujours bons avec cette sortie en mars ?

@tannaalok improbable. Espérons que @benoitc puisse publier le travail IPC et alors peut-être que la prise en charge de Windows sera possible. Il faudra un certain temps pour que le travail IPC atterrisse, puis le reste du travail Windows sera découvert, trié et travaillé. C'est très difficile à dire.

@tilgovi le travail IPC atterrira dans une branche parfois la semaine prochaine enfin :)

Maintenant à propos de la version windows, voici le plan que j'ai en tête. La première chose à faire serait de connecter Gunicorn à un CI Windows pour commencer à noter les problèmes. Il y a alors 2 scénarios, exécuter gunicorn dans cygwin ou exécuter gunicorn dans des fenêtres simples. Les deux peuvent déclencher des résultats différents et doivent être testés. Pour autant que je sache, les choses pour rendre gunicorn portable sont les suivantes :

  • gestion des signaux : les signaux fonctionnent différemment sous Windows et nous devons trouver un moyen d'exposer les fonctionnalités suivantes : http://docs.gunicorn.org/en/stable/signals.html
  • génération de travailleurs : il y a peut-être une différence sur Windows. Le travail IPC supprimera l'utilisation du fichier temporaire pour vérifier si les travailleurs sont vivants en le remplaçant par un tuyau. Cette partie doit être rendue compatible
  • worker supports : je ne sais pas encore comment se comportent les travailleurs gevent, eventlet et tornado sur windows. c'est de toute façon un bon appel à les séparer en dehors de gunicorn. Nous pouvons donc les mettre à niveau séparément. Le worker gthread peut fonctionner de manière transparente si on passe en python 3. ce qui sera le cas.

Ai-je manqué quelque chose? Toute aide est la bienvenue, je ne suis pas moi-même un utilisateur quotidien de Windows. Donc, toute personne expérimentée sur les fenêtres qui veut prendre les devants sur cette partie pour faire de la plate-forme Windows un premier citoyen de gunicorn est la bienvenue !

Python 3.5 ajoute une fonctionnalité utile pour gérer les signaux sous Windows : signal.set_wakeup_fd() accepte désormais un handle de socket sous Windows.
https://docs.python.org/dev/library/signal.html#signal.set_wakeup_fd

comme @cyberdelia a dit qu'on pourrait demander une licence de windows à la PSF

Microsoft offre des licences MSDN gratuites pour les développeurs principaux de Python. Par exemple, en tant que développeur principal, j'ai accès à Visual Studio 2015.

@haypo merci. En fait, cela pourrait également être utilisé pour réveiller l'arbitre sur unix aussi... Très utile.

Si un développeur principal pouvait aider, ce serait utile :) Une idée sur la façon d'en demander un lorsqu'il s'agit d'un projet externe ?

Vous avez également le WSL (Windows pour Linux) à cibler pour la capacité Windows

Existe-t-il un moyen pour une personne ayant des connaissances limitées de Linux et de gunicorn d'aider à le porter sur Windows, ou les problèmes sont-ils trop non triviaux?

Pourquoi ce problème est-il clos ? Je ne trouve aucune information sur le travail sous windows

Cette question est toujours ouverte.

@DominikDitoIvosevic c'est toujours ouvert. Je fournirai une sorte de feuille de route parfois cette semaine.

Je suis tombé sur une lecture de compatibilité aujourd'hui. Je regardais mon travail sur #1310. J'ai géré FD_CLOEXEC différemment des bibliothèques C systemd. Cela m'a conduit à PEP 446 , en pensant au comportement de fork , et en me rappelant qu'il n'y a pas de fork sur Windows.

Pour commencer, voici quelques éléments dont nous avons besoin sur la feuille de route :

  • Configurer CI
  • Remplacez os.fork , probablement par multiprocessing.Process
  • Remplacez WorkerTemp par multiprocessing.Pipe
  • Ajouter des versions de compatibilité des assistants d'héritage FD
  • (trouver d'autres choses, probablement plus mineures, et les réparer)

Coincé avec Windows au travail, cela m'aiderait vraiment. J'attends avec impatience cette fonctionnalité !

Je reconnais que ce n'est peut-être pas une réponse, mais je trouve la serveuse vraiment bonne pour
Les fenêtres.

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

Coincé avec Windows au travail, cela m'aiderait vraiment. Très impatient
cette fonctionnalité!

-
Vous recevez ceci parce que vous êtes abonné à ce fil.
Répondez directement à cet e-mail, consultez-le sur GitHub
https://github.com/benoitc/gunicorn/issues/524#issuecomment -238351654,
ou couper le fil
https://github.com/notifications/unsubscribe-auth/AALnfBAXBrmPlU1JPx6RXI0vFQPLmBlyks5qd4XhgaJpZM4AnyCw
.

Cordialement votre,
Gleb

@chester89 ce n'est sûrement pas vraiment approprié là-bas....

@hirolau, je viens de @berkerpeksag pourra aider pour les tests. Je vais rédiger un plan afin que nous nous assurons de l'avoir disponible parfois le mois prochain :)

@benoitc - bosse sans vergogne !

J'utilise généralement des fenêtres, donc le travail de gunicorn sur les fenêtres sera très apprécié. Merci !
Avez-vous des plans quand il sera prêt ?

des nouvelles à ce sujet? nous sommes obligés d'utiliser Windows en production. Si le travail est au point mort, pourriez-vous partager le projet de plan ? Tchin Tchin!

@cmorgan La même situation ici. Est-ce que quelqu'un a des mises à jour sur ce problème ?

@benoitc des nouvelles à ce sujet ?

Bonjour à tous
des nouvelles à ce sujet?

Je suis sûr que des mises à jour seront ajoutées au problème. Il n'est pas nécessaire de demander des mises à jour.

Salut tout le monde,

Désolé de ne pas avoir répondu avant. J'ai été assez occupé ces jours-ci. Il semble donc qu'il y ait beaucoup de gens qui attendent cette fonctionnalité, il est temps de la faire. Je vais rédiger un plan d'ici dimanche à ce sujet et trouver un moyen d'y arriver :)

Je pense que diviser cela en tâches plus petites et plus exploitables pourrait être la meilleure voie à suivre.

En tant que tel, j'ai déposé le numéro 1467 pour la partie "configuration de CI" avec le PR # 1468 pour l'ajout d'une configuration AppVeyor. Un exemple de test peut être vu ici :
https://ci.appveyor.com/project/edmorley/gunicorn/build/windows-ci.18

En plus des changements plus importants mentionnés dans les commentaires précédents (signaux, IPC des travailleurs, gestion du manque de fourche, etc.), les problèmes suivants doivent être résolus avant même que les tests ne s'exécutent :

@edmorley merci, je le regarderai dès que possible :)

Quand puis-je respecter cette fonction? Ce problème a commencé il y a environ quatre ans。

Salut,
Nous cherchons également à avoir cette fonctionnalité, avons-nous une idée du moment où cela pourrait commencer à se produire ?

Bonjour, quand cela va-t-il être traité ? :)

Si quelqu'un veut aider, il serait utile de s'attaquer à l'un des problèmes que @edmorley a trouvés.

Soyez conscient que certaines choses pourraient changer plus radicalement pour rendre cela possible.

Il n'y a pas de calendrier pour cela en ce moment. Si vous voulez aider, IRC peut être le meilleur endroit pour en discuter ou ouvrir des problèmes plus petits pour des éléments de travail individuels.

Veuillez vous abonner à ce numéro si vous souhaitez être informé des progrès. Pour le moment, il n'y a pas de calendrier.

FWIW, Gunicorn fonctionne dans Cygwin sous Windows. Je sais que ce n'est pas très utile mais voilà...

@Zorlin Je ne documentation officielle

$ 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

Je continue à recevoir cette erreur dans Cygwin

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

cela fonctionne également dans le sous-système sur Windows 10, alors peut-être que ce n'est plus nécessaire?

Pour prendre en charge les fenêtres nativement, nous avons besoin des éléments suivants :

  • [ ] aller à python3 pour simplifier le code
  • [ ] utilise CreateProcessW pour générer un processus au lieu de os.fork (peut-être en réutilisant l'abstraction _winapi utilisée dans le multitraitement ?
  • [ ] sockets je pense qu'il existe déjà du code porté pour asyncio et disponible en python 3 qui peut être utilisé pour les gthreads
  • [ ] autorisations. nous devrions plutôt prendre en charge la façon dont Windows permet au lancement des services de démoniser. aussi les privilèges doivent être gérés différemment

(peut-être en réutilisant l'abstraction _winapi utilisée en multitraitement ?

BTW, le multitraitement utilise CreateProcess dans popen_spawn_win32.py et cela ne fait pas partie du processus de compatibilité descendante de Python puisqu'il s'agit d'un module interne.

Bonjour à tous! Comment évoluent les avancées sur ce problème ? Avons-nous des dates cibles en vue pour l'achèvement? Merci!

@bartmika non. Il n'y aura pas de date cible. Nous avons beaucoup de travail à faire comme Benoitc l'a souligné. Nous accueillons l'aide. Comme je l'ai dit ci-dessus, veuillez vous abonner à ce numéro pour les mises à jour. Nous mettrons à jour quand il y a quelque chose à partager.

Merci @tilgovi ,

Je voudrais discuter de la possibilité de mettre une prime sur la fermeture de ce problème. Puisse un développeur de Gunicorn me contacter à bart [ at ] simalam.com

Merci!

@bartmika désolé a été une semaine chargée. Je vous contacterai demain une fois que j'aurai été en contact avec @tilgovi & @berkerpeksag . Bonne idée en tout cas.

@benoitc voulait juste vérifier l'état de Gunicorn pour Windows. Je vois qu'il n'y a pas encore de date de sortie mais je voulais voir s'il y avait quelque chose de bêta que je pouvais tester sur Windows.

Les travaux de

@bartmika, j'ai été

Existe-t-il maintenant un support pour Windows ?. C'est décembre

J'attends ça avec impatience ! C'est janvier.

@benoitc Des mises à jour ?

Salut,

Je viens de me reconnecter, y a-t-il quelque chose de nouveau ?

Merci
Mike

salut

Puis-je utiliser Apache Airflow sur Windows maintenant ?

Merci
Sudhakar

Salut,

J'essaye la commande suivante mais j'obtiens cette erreur. Pouvez-vous aider à ce sujet ?

(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'

En guise de hack, j'ai créé fcntl.py fichier fcntl.cpython-36.pyc , je l'ai placé dans le dossier __pycache__ , j'ai redémarré le terminal et j'ai exécuté la commande gunicorn --bind 0.0.0.0:8000 hello-world:app , mais toujours pas de chance.

Contenu 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

J'ai obtenu ceci de https://stackoverflow.com/questions/11087682/does-gunicorn-run-on-windows

Serait-il utile que quelqu'un puisse suggérer la meilleure alternative à Gunicorn pour Windows pour le moment ?

Mise à jour : j'utilise maintenant la serveuse , très bonne alternative :)

Cela fait 5 ans et une mise à jour sur celui-ci? Merci.

@hsluoyz la dernière chose qui s'est produite publiquement était le 16 mars de cette année, je crois.

Salut,
Vous n'avez pas encore réussi à faire fonctionner la fourchette dans Windows ?

Salut,

Je serais intéressé à travailler sur ce ticket.
Quel est l'état actuel du port ?

Quel est l'état actuel du port ?

Le PR #1468 a été fusionné il y a un an et a ajouté des tests sur AppVeyor sous Windows, mais le compte AppVeyor doit être activé avant de pouvoir s'exécuter.

Après cela, quelqu'un doit parcourir les échecs qui se produisent dans les tests Windows.

@edmorley Je m'occuperai d'appveyor aujourd'hui.

@Sweenpet pas encore grand-chose. La première chose à faire est de regarder les résultats du test et de créer des tickets à partir de celui-ci.

Nous devons également décider de la portée :

  • [ ] fonctionne-t-il non WSL ? Qu'est-ce qui manque pour iy?
  • [ ] prise en charge de cygwin ?
  • [ ] support natif : quel type de supervision nous voulons. Je suppose que nous voulons qu'il fonctionne en tant que service.

Je propose d'en discuter sur IRC parfois demain si tu veux ?

J'ai installé appveyor sur le référentiel :

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

@benoitc , j'ai l'application (examples/flaskapp.py) et tous les tests exécutés sur WSL, pour Ubuntu 18.04 et Python 3.6.5. Vraisemblablement, cela devrait fonctionner pour toutes les autres versions spécifiées dans le fichier tox. Le fait qu'il fonctionne sur WSL résoudrait la plupart des problèmes des utilisateurs de Windows, j'imagine, à moins qu'ils ne fonctionnent pas sur Windows 10. Cygwin est-il toujours largement utilisé ?

Heureux d'avoir une discussion demain sur le support natif sur Windows, quelle heure convient?

Créera également ces tickets demain, semble être principalement autour des modules et sockets Linux natifs.

FWIW, j'utilise cygwin sur windows

Si Python ne fonctionne pas correctement sous Windows (par exemple, psycopg2, weasyprint et autres), pourquoi diable Python prétend-il toujours qu'il est multiplateforme ? Jusqu'à présent, il ne fonctionne même pas correctement sous Windows 10.

@jtan4nih cette attitude est déplacée.

Python est multiplateforme, pas gunicorn.

désolé j'ai été horriblement détourné. Je dirais que si quelqu'un veut exécuter nativement gunicorn sur Windows, je serais heureux d'accepter n'importe quel correctif et de répondre à toutes les questions.

voir cs01/gdbgui#18, peut-être aider

Cela fait 7 ans, et une chance pour y arriver?

j'ai peut-être un cycle que vous y consacrez en mars. il va falloir que je trouve un
façon d'exécuter Windows quelque part. vous pouvez déjà l'exécuter dans le terminal
De toute façon.

aussi toute personne qui utilise réellement Windows peut aider sur ce sujet.

Essayez waitress .
La conception de gunicorn est de tirer parti des noyaux Unix et de type Unix pour former un serveur Web.

regarder ces tutoriels youtube sur la façon de déployer django sur heroku en utilisant gunicorn me fait vraiment me demander comment est-il possible pour eux de le faire, en attendant je suis toujours coincé avec le problème de gunicorn lol

Essayez waitress .
La conception de gunicorn est de tirer parti des noyaux Unix et de type Unix pour former un serveur Web.

La serveuse ne prend pas en charge le multitraitement approprié.

Existe-t-il une idée approximative de la manière dont cela pourrait être fait sous Windows pour prendre en charge un multitraitement approprié ?
Savons-nous quels sont les principaux obstacles jusqu'à présent pour que cela soit mis en œuvre?

j'ai peut-être un cycle que vous y consacrez en mars. Je vais devoir trouver un moyen d'exécuter Windows quelque part. vous pouvez déjà l'exécuter dans le terminal de toute façon.

Les machines virtuelles de développement Win10 pourraient-

Peut-être que nous pouvons utiliser pywin32 pour Windows au lieu de fnctl sur Windows, il semble qu'ils aient des capacités de verrouillage de fichiers .

Cette page vous a été utile?
0 / 5 - 0 notes