如何在使用gunicorn的Google App Engine上运行长任务?

时间:2018-01-09 02:07:56

标签: python google-app-engine gunicorn

GAE flex默认使用gunicorn作为入口点,这很好,除了我有一个需要很长时间处理的功能(在数据库中抓取网站和故事数据)和gunicorn默认在30秒时出现,然后一个新工人开始完成任务,依此类推。

我可以将枪炮超时设置为20分钟,但看起来并不优雅。有没有办法在gunicorn的“外部”运行这些后端功能,或者也许是我没想过的枪支配置?没有客户端,所以很长时间没有问题。

我的 app.yaml 文件目前看起来像这样:

runtime: python
env: flex
entrypoint: gunicorn -b :$PORT main:app

runtime_config:
  python_version: 2

# This sample incurs costs to run on the App Engine flexible environment. 
# The settings below are to reduce costs during testing and are not appropriate
# for production use. For more information, see:
# https://cloud.google.com/appengine/docs/flexible/python/configuring-your app-with-app-yaml
manual_scaling:
  instances: 1
resources:
  cpu: 1
  memory_gb: 3
  disk_size_gb: 10

1 个答案:

答案 0 :(得分:0)

您可以使用async worker-class,然后您无需将超时设置为20分钟。默认的工作程序类是sync。有关工人here的文档。

使用eventlet异步工作程序(如果使用Google客户端库,则不建议使用gevent)

pip install eventlet

然后在您的gunicorn实例化中将worker-class ='eventlet'设置为$ [cores] x 2 +1(这只是google docs中的建议)。 例如:

CMD exec gunicorn --worker-class eventlet --workers 3 -b :$PORT main:app

Gunicorn Worker Configuration

或者,使用pubsub和worker使用here描述的实现。