Gunicorn: 添加 Windows 支持

创建于 2013-05-01  ·  90评论  ·  资料来源: benoitc/gunicorn

这和我们在 PyCon 上讨论的东西有关

Improvement FeaturCore help wanted - Mailing List - Platforwindows

最有用的评论

@jtan4nih这种态度是不必要的。

Python 是跨平台的,gunicorn 不是。

所有90条评论

擦。 计划为 R18。

一些更新:

  • SOCKET 支持很到位,下周上线一个分支

去做:

处理服务启动/停止/重启以使用 gunicorn 作为完整的 Windows 服务。 它以某种方式取代了 unix 下信号的使用。

支持最终将在R20 中发生。 下周我将创建新的 PR 来跟踪此功能的开发。

需要解决的问题是:

  • 使 Worker 通知适应 Windows
  • 将信令移植到 Windows:重新加载和重新执行
  • 确保套接字可以在进程之间继承

为 gunicorn 添加 Windows 支持的进展如何? 或者更确切地说,你离R20有多远? 我遇到了和#587一样的问题

进展缓慢。 我现在想发布带有线程工作的 R19。 我会在星期一推送一个版本。 Windows 支持将在之后到达。

这个 Windows 支持的版本在某处可用吗?

Windows 支持将在 R20 中提供,所以我想 guincorn 将支持 Windows 还需要一段时间......我用 Ubuntu 创建了一个虚拟机,这对我有用......

只是好奇这方面的任何进展。 作为第一关,它甚至不需要很快; 一个很大的优势是能够在 Windows 上使用 Gunicorn 进行开发并推送到 Linux 服务器(例如 Heroku)而无需更改配置。

@robertlagrant这是我的待办事项。 我需要先找到一个 Windows 许可证。 R20将于10月发布,

在 modern.ie 上的 VM 镜像怎么样? 这些是免费且合法的
2014 年 9 月 22 日下午 3:30,“Benoit Chesneau”通知@ github.com 写道:

@robertlagrant https://github.com/robertlagrant这是我的待办事项,直到
年底。 我需要先找到一个 Windows 许可证。


直接回复此邮件或在 GitHub 上查看
https://github.com/benoitc/gunicorn/issues/524#issuecomment -56372470。

我最近在 IE8 中使用了 Modern.ie 图像来测试 Web 应用程序。 容易上手并且工作得很好。

@benoitc如果需要,我相信PSF可以为您提供 Windows 许可证。

@benoitc是否有一个 WIP 分支? 我不是 Windows 用户,但我可以看看这个。

@berkerpeksag还没有:/我们真的应该尽快开始。

就像@cyberdelia说的,我们可以在 PSF 上要求获得一份 windows 许可证,gunicorn 项目可以将其用于此类开发。 想法?

是个好主意。 https://www.python.org/psf/grants/包含有关赠款提案的所有信息。

有任何更新吗?

我也在寻找这方面的更新。

@berkerpeksag让我们尽快在 IRC 上谈一谈,因为我现在远离任何即时的事情,所以之前有时只是 ping 我 :)

@benoitc关于这个有什么更新吗?

@lealhugui据我所知,此后一直没有进展。 无论如何,我有一个计划:

  1. 我们应该将 gunicorn 放在处理 windows 的 CI 系统中以了解它在哪里失败
  2. 在新的 IPC 库上启动端口(有时在下个月)以开始在 windows 上的工作

我可以期待有时会在三月发布。 可能会更快但没有承诺:) 如果有人实际上比我更了解 windows(暗示我自 1995 年以来就没有使用 windows...)可以提供帮助,那么工作当然可以进行得更快!

@benoitc在 1 月中旬之后,我可以提供帮助(基本上是测试,或任何您需要的,我可以提供帮助)。

@lealhugui谢谢! 我会尽快提供更新

希望事情进展顺利。 我们对 3 月份的这个版本还满意吗?

@tannaalok不太可能。 希望@benoitc可以发布 IPC 工作,然后也许 Windows 支持将成为可能。 IPC 工作需要一些时间才能落地,然后其余的 Windows 工作将被发现、分类和处理。 很难说。

@tilgovi IPC 的工作最终将在下周有时登陆一个分支:)

现在关于 Windows 版本,这是我的计划。 首先要做的是将 Gunicorn 连接到 Windows CI以开始注意问题。 然后有 2 个场景,在 cygwin 中运行 gunicorn 或在普通窗口中运行 gunicorn。 两者可以触发不同的结果,需要进行测试。 据我所知,使 gunicorn 便携的东西如下:

  • 信号处理:信号在 Windows 下的工作方式不同,我们需要找到一种方法来公开以下功能: http :
  • 工人产卵:Windows 上可能存在一些差异。 IPC 工作将删除临时文件的使用,以检查工作人员是否还活着,用管道替换它。 这部分应该兼容
  • 工人支持:我还不确定 Windows 上的 gevent、eventlet 和 Tornado 工人的行为。 无论如何,这是将它们拆分到 gunicorn 之外的好方法。 所以我们可以将它们分开升级。 如果我们使用 python 3,gthread worker 可以透明地工作。就是这种情况。

我错过了什么吗? 欢迎任何帮助,我自己不是 Windows 日常用户。 因此,任何在 Windows 上有经验的人都希望在这方面带头使 Windows 平台成为 gunicorn 的第一个公民!

Python 3.5 添加了一个有用的功能来处理 Windows 上的信号:signal.set_wakeup_fd() 现在接受 Windows 上的套接字句柄。
https://docs.python.org/dev/library/signal.html#signal.set_wakeup_fd

就像@cyberdelia说的,我们可以在 PSF 上申请 Windows 许可证

Microsoft 为 Python 核心开发人员提供免费的 MSDN 许可证。 例如,作为核心开发人员,我可以访问 Visual Studio 2015。

@haypo谢谢。 实际上,这也可以用于唤醒 unix 上的仲裁器……非常有用。

如果核心开发人员可以提供帮助,那么这将很有用 :) 当它是外部项目时,您知道如何要求一个吗?

您还可以使用WSL(Windows for Linux)来针对 Windows 功能

有没有什么方法可以帮助对 linux 和 gunicorn 知识有限的人将其移植到 windows 上,或者问题是否太重要了?

为什么这个问题被关闭了? 我找不到有关在 Windows 上工作的任何信息

这个问题仍然是开放的。

@DominikDitoIvosevic它仍然开放。 本周我有时会提供某种路线图。

我今天偶然发现了一些兼容性阅读。 我正在查看我在 #1310 上的工作。 我处理 FD_CLOEXEC 的方式与 systemd C 库不同。 这让我想到PEP 446 ,思考fork行为,并记住 Windows 上没有fork

为了开始工作,以下是我们在路线图上需要的一些东西:

  • 设置 CI
  • 替换os.fork ,可能用multiprocessing.Process
  • WorkerTemp替换multiprocessing.Pipe
  • 添加兼容版本的FD 继承助手
  • (找到其他可能更小的事情并修复它们)

在工作中坚持使用 Windows 这真的对我有帮助。 非常期待这个功能!

我知道这可能不是一个答案,但我发现女服务员真的很适合
视窗。

2016年8月8日22:39 GMT + 03:00 hirolau [email protected]

在工作中坚持使用 Windows 这真的对我有帮助。 万众期待
此功能!


您收到此消息是因为您订阅了此线程。
直接回复本邮件,在GitHub上查看
https://github.com/benoitc/gunicorn/issues/524#issuecomment -238351654,
或静音线程
https://github.com/notifications/unsubscribe-auth/AALnfBAXBrmPlU1JPx6RXI0vFQPLmBlyks5qd4XhgaJpZM4AnyCw
.

此致,
格莱布

@chester89这在那里肯定不是很合适......

@hirolau我上个月刚刚获得了 MSDN 开发人员许可证,所以我可以在 Windows 上轻松测试它。 希望@berkerpeksag能够为测试提供帮助。 我将起草一个计划,以便我们确保下个月有时可以使用它:)

@benoitc - 无耻的撞!

我通常使用 Windows,因此在 Windows 上使用 gunicorn 工作将非常受欢迎。 谢谢 !
你有什么计划什么时候准备好?

有这方面的消息吗? 我们被迫在生产中使用 Windows。 如果工作停滞不前,你能分享一下计划草案吗? 干杯!

@cmorgan这里的情况相同。 有没有人有关于这个问题的更新?

@benoitc有这方面的消息吗?

大家好
有这方面的消息吗?

我相信任何更新都会添加到问题中。 没有必要要求更新。

大家好,

抱歉之前没有回答。 这几天我一直很忙。 所以似乎有很多人在等待这个功能,现在是时候实现了。 我将在星期天之前起草一份关于它的计划,并设法找到实现它的方法:)

我相信将其分解为更小、更可操作的任务可能是最好的前进方式。

因此,我已经为“设置 CI”部分提交了 #1467 以及用于添加 AppVeyor 配置的 PR #1468。 可以在此处查看示例测试运行:
https://ci.appveyor.com/project/edmorley/gunicorn/build/windows-ci.18

除了之前评论中提到的更大的变化(信号、工作程序 IPC、处理缺少分叉等)之外,在测试甚至运行之前还需要解决以下问题:

@edmorley谢谢,会尽快看的 :)

我什么时候可以尊重这个功能? 这个问题大约是四年前开始的。

你好,
我们也希望拥有此功能,我们知道这可能何时开始发生吗?

你好,请问什么时候可以处理? :)

如果有人想提供帮助,解决@edmorley发现的任何问题都是有用的 PR。

请注意,为了使这成为可能,有些事情可能会发生更大的变化。

目前没有时间表。 如果您想提供帮助,IRC 可能是讨论它或为单个工作项打开较小问题的最佳场所。

如果您想收到进度通知,请订阅此问题。 现在没有时间表。

FWIW,Gunicorn 在 Windows 上的 Cygwin 中工作。 我知道这不是很有帮助,但它是......

@Zorlin我无法在 Windows 上使用 Cygwin。 我试着做官方文档中的例子

$ 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

我在 Cygwin 中不断收到此错误

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

这也在 Windows 10 的子系统中运行,所以也许不再需要它了?

为了原生支持 Windows,我们需要以下内容:

  • []去python3简化代码
  • [] 使用CreateProcessW来生成一个进程而不是 os.fork(也许重用了多处理中使用的 _winapi 抽象?
  • [] 套接字我相信已经有一些代码移植到 asyncio 并且在 python 3 中可用,可用于 gthreads
  • [ ] 权限。 我们应该支持 Windows 允许启动服务进行守护进程的方式。 特权也应该以不同的方式处理

(也许重用多处理中使用的 _winapi 抽象?

顺便说一句,多处理在popen_spawn_win32.py使用CreateProcess并且它不是 Python 向后兼容过程的一部分,因为它是一个内部模块。

大家好! 这个问题的进展如何? 我们是否有任何完成的目标日期? 谢谢!

@bartmika没有。 不会有一个目标日期。 正如 Benoitc 所概述的,我们有很多工作要做。 我们欢迎帮助。 正如我上面所说,请订阅此问题以获取更新。 有什么要分享的时候我们会更新。

谢谢@tilgovi

我想讨论一下可能会悬赏解决这个问题。 请 Gunicorn 的开发人员通过 bart [ at ] simalam.com 与我联系

谢谢!

@bartmika抱歉是忙碌的一周。 一旦我与@tilgovi@berkerpeksag联系,我将在明天与您联系。 总之是个好主意。

@benoitc只是想检查

@jmaulsby 的工作还没有真正开始。 我慢慢恢复了。 我的计划是在 12 月发布下一个主要版本,包括对 Windows 的一些支持。

@bartmika这些天我一直被

那么现在有对 Windows 的支持吗? 现在是十二月

期待! 现在是一月。

@benoitc 有任何更新吗?

你好,

刚刚再次入住,有什么新东西吗?

谢谢
麦克风

你好

我现在可以在 Windows 上使用 Apache Airflow 吗?

谢谢
苏达卡尔

你好,

我正在尝试以下命令,但出现此错误。 你能帮忙吗?

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

作为一个黑客,我创建fcntl.py具有以下内容的fcntl.cpython-36.pyc文件,将其编译为__pycache__文件夹下,重新启动终端,然后运行命令gunicorn --bind 0.0.0.0:8000 hello-world:app ,但仍然没有运气。

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

https://stackoverflow.com/questions/11087682/does-gunicorn-run-on-windows得到这个

任何人都可以暂时为 Windows 推荐最好的 Gunicorn 替代品会有所帮助吗?

更新:我现在正在使用女服务员,非常好的选择:)

已经5年了,这个有什么更新吗? 谢谢。

@hsluoyz上一次公开发生的事情是在今年 3 月 16 日,我相信。

你好,
让叉子在 Windows 中工作还没有运气吗?

你好,

我有兴趣处理这张票。
港口现状如何?

港口现状如何?

PR #1468 在一年前合并,增加了对 Windows 上 AppVeyor 的测试,但 AppVeyor 帐户需要激活才能运行。

之后,有人需要迭代 Windows 测试运行中发生的故障。

@edmorley我今天会处理 appveyor。

@Sweenpet 还没有什么。 首先要做的是查看测试结果并从中创建票证。

我们还需要决定范围:

  • [] 它不是 WSL 吗? iy 缺少什么?
  • [] cygwin 支持吗?
  • [] 原生支持:我们想要什么样的监督。 我想我们希望它作为服务运行。

如果你愿意的话,我建议明天有时在 IRC 上讨论这个问题?

我在存储库上安装了 appveyor:

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

@benoitc ,我有应用程序 (examples/flaskapp.py) 和在 WSL 上运行的所有测试,适用于 Ubuntu 18.04 和 Python 3.6.5。 据推测,它应该适用于 tox 文件中指定的所有其他版本。 它在 WSL 上运行的事实将解决我想象的大多数 Windows 用户问题,除非他们不在 Windows 10 上运行。 Cygwin 仍然被广泛使用吗?

很高兴明天讨论 Windows 上的本机支持,什么时间合适?

明天也会创建这些票,似乎主要围绕本地 Linux 模块和套接字。

FWIW,我在 Windows 上使用 cygwin

如果 Python 不能在 Windows 上正常运行(例如 psycopg2、weasyprint 等等),为什么 Python 仍然声称它是跨平台的? 到目前为止,它甚至无法在 Windows 10 上正常运行。

@jtan4nih这种态度是不必要的。

Python 是跨平台的,gunicorn 不是。

对不起,我被可怕地侧跟踪了。 我会说,如果有人想在 Windows 上本地运行 gunicorn,我很乐意接受任何补丁并回答任何问题。

见 cs01/gdbgui#18,也许有帮助

已经7年了,有什么运气让它发生吗?

三月份我可能会花一些时间在上面。 我需要找到一个
在某处执行窗口的方法。 您已经可以在终端中运行它
反正。

任何实际使用 Windows 的人都可以在该主题上提供帮助。

试试waitress
gunicorn的设计是利用 Unix 和类 Unix 内核来形成一个 web 服务器。

看着那些关于如何使用 gunicorn 在 heroku 上部署 django 的 youtube 教程真的让我想知道他们怎么可能做到这一点,同时我仍然被 gunicorn 问题困住了哈哈

试试waitress
gunicorn的设计是利用 Unix 和类 Unix 内核来形成一个 web 服务器。

女服务员不支持正确的多处理。

是否有一个粗略的想法如何在 Windows 上完成以支持适当的多处理?
到目前为止,我们是否知道实现这一目标的主要障碍是什么?

三月份我可能会花一些时间在上面。 我需要找到一种在某处执行 windows 的方法。 无论如何,您已经可以在终端中运行它。

Win10 开发 VM能否成为您运行 Windows 并检查 gunicorn 兼容性的解决方案?

也许我们可以在 windows 上使用pywin32而不是在 windows 上使用fnctl ,它们似乎具有文件锁定功能。

此页面是否有帮助?
0 / 5 - 0 等级