Cygwin上使用Python 3.7的Flask / Werkzeug:BlockingIOError:[Errno 11]资源暂时不可用

问题描述

似乎Cygwin上的Python 3.7在Werkzeug中存在一些问题。我有一个复杂的Flask应用程序,并决定将我的virtualenv升级到3.7,然后突然我看到此警告

0 [main] python3.7 1642 child_info_fork :: abort:需要的地址空间 通过'bit_generator.cpython-37m-x86_64-cygwin.dll'(0x600000)已存在 占领

或者说只是因为BlockingIOError而崩溃。

Traceback (most recent call last):
  File "run.py",line 5,in <module>
    app.run(debug=True)
  File "/cygdrive/c/py/venvs/cyg/lib/python3.7/site-packages/flask/app.py",line 990,in run
    run_simple(host,port,self,**options)
  File "/cygdrive/c/maga/personale/py/venvs/cyg/lib/python3.7/site-packages/werkzeug/serving.py",line 1050,in run_simple
    run_with_reloader(inner,extra_files,reloader_interval,reloader_type)
  File "/cygdrive/c/py/venvs/cyg/lib/python3.7/site-packages/werkzeug/_reloader.py",line 339,in run_with_reloader
    sys.exit(reloader.restart_with_reloader())
  File "/cygdrive/c/py/venvs/cyg/lib/python3.7/site-packages/werkzeug/_reloader.py",line 183,in restart_with_reloader
    exit_code = subprocess.call(args,env=new_environ,close_fds=False)
  File "/usr/lib/python3.7/subprocess.py",in call
    with Popen(*popenargs,**kwargs) as p:
  File "/usr/lib/python3.7/subprocess.py",line 800,in __init__
    restore_signals,start_new_session)
  File "/usr/lib/python3.7/subprocess.py",line 1482,in _execute_child
    restore_signals,start_new_session,preexec_fn)
BlockingIOError: [Errno 11] Resource temporarily unavailable

不清楚是哪一部分是罪魁祸首。如果我尝试清空我的 init .py,似乎某些导入链有问题(导入文件再导入另一个文件)。我以为罪魁祸首之一是子流程的导入,但事实并非如此。

是否可以做一些事情以获得更多输出,以便提供更多信息来解决此问题?我真的不能在这里复制整个代码,而且看来一个简单的项目没有这个问题。

解决方法

在正确的Cygwin安装中,共享库始终在比fork失败的情况下更高的地址上运行。

要查看预期范围,可以查看基址数据库。
在我当前的系统上:

$ rebase -si | awk '{ print $3,$1}' |sort  |head -n 5
0x0003ce2c0000 /usr/libexec/coreutils/libstdbuf.so
0x0003ce2d0000 /usr/lib/texinfo/XSParagraph.dll
0x0003ce2e0000 /usr/lib/texinfo/Parsetexi.dll
0x0003ce310000 /usr/lib/texinfo/MiscXS.dll
0x0003ce320000 /usr/lib/sasl2_3/cygscram-3.dll

$ rebase -si | awk '{ print $3,$1}' |sort -r |head -n 5
0x0003fffd0000 /usr/bin/cygEGL-1.dll
0x0003fffa0000 /usr/bin/cygEMF-1.dll
0x0003fff20000 /usr/bin/cygFLAC-8.dll
0x0003ffea0000 /usr/bin/cygGL-1.dll
0x0003ffe30000 /usr/bin/cygGLU-1.dll

因此,或者您的数据库已损坏并且重新设置基准未正确执行,或者BLODA正在干扰正确加载dll。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...