部署Python Web应用程序后出现App Engine错误 - BlockingIOError:[Errno 11]资源暂时不可用

问题描述 投票:2回答:1

我在Python 3.7上的标准环境中运行我的Web应用程序,当我在本地测试它时一切正常。但是,在我部署我的应用程序后,当应用程序尝试将文件保存到我指定的/tmp位置时,我收到以下错误:

BlockingIOError: [Errno 11] Resource temporarily unavailable

这就是指定保存路径以及文件名的方法。

file_num = os.urandom(10).hex()

handle, path = tempfile.mkstemp()

ytdl_format_options = {'format': 'bestaudio/best','outtmpl':path + 'song'+ file_num +'.mp3', 'quiet': True}

我不确定是什么导致了这个错误,或者是否有某种类型的配置文件设置,我在app.yaml或gunicorn上缺少。我也尝试在glcoud shell上找到gunicorn文件,但它们没有显示在目录中。

我注意到,当我对文件进行新的更改并重新部署应用程序时,我的应用程序将随机正常工作,但是它只会工作一次然后如果我立即尝试再次运行该功能则会失败。这是我收到的错误:

Traceback (most recent call last):
  File "/env/lib/python3.7/site-packages/gunicorn/workers/gthread.py", line 279, in handle
    keepalive = self.handle_request(req, conn)
  File "/env/lib/python3.7/site-packages/gunicorn/workers/gthread.py", line 348, in handle_request
    six.reraise(*sys.exc_info())
  File "/env/lib/python3.7/site-packages/gunicorn/six.py", line 625, in reraise
    raise value
  File "/env/lib/python3.7/site-packages/gunicorn/workers/gthread.py", line 331, in handle_request
    resp.write_file(respiter)
  File "/env/lib/python3.7/site-packages/gunicorn/http/wsgi.py", line 403, in write_file
    if not self.sendfile(respiter):
  File "/env/lib/python3.7/site-packages/gunicorn/http/wsgi.py", line 393, in sendfile
    sent += sendfile(sockno, fileno, offset + sent, count)
BlockingIOError: [Errno 11] Resource temporarily unavailable
python python-3.x google-app-engine google-cloud-platform gunicorn
1个回答
1
投票

来自Filesystem

运行时包括完整的文件系统。文件系统是只读的,但位置为/tmp,它是在App Engine实例的RAM中存储数据的虚拟磁盘。

所以:

  • 使用除/tmp以外的任何位置将无法正常工作
  • 可用空间量有限。因此,您的应用需要在使用后注意删除临时文件。您描述的行为表明可用空间可能仅适用于您的1个文件。

另一件需要考虑的事情是多个并行请求:如果每个这样的请求都可以创建自己的文件,那么可能会出现错误,因为不同的此类请求会同时写入多个文件。添加限制并行处理的请求数量的方案将是一种可能的方法。

虽然不是100%肯定我怀疑限制也可能取决于实例的RAM总量,在这种情况下,你的应用程序的配置instance class也很重要。要检查这是否属实,只需临时配置一个具有更多RAM的实例类,看看是否有帮助(例如,在没有清理文件的情况下,它可能会在遇到错误之前多次工作)。

如果上述怀疑得到确认,那么选择适当的实例类也可能是解决问题的方法。

尽管应用了上述所有内容,但仍有可能遇到问题,例如,如果您编写的某些文件太大了。如果是这样,那么使用本地文件系统不适合您的应用程序。可能的替代方案是store your files in Google Cloud Storage (GCS)

© www.soinside.com 2019 - 2024. All rights reserved.