一个用于与HireFire服务集成的Python库 -- Heroku进程管理器
项目描述
这是一个用于HireFire – Heroku进程管理器的Python包。
HireFire能够在必要时自动调整你的Web和worker dynos的大小。当新任务被添加到你的应用程序的worker队列时[..],HireFire会启动新的worker dynos来处理这些任务。当队列为空时,HireFire将再次关闭worker dynos,这样你就不会为空闲的worker付费。
HireFire 还具有扩展您的 Web Dynos 的能力。当您的 Web 应用程序在一天中的某些时间经历高流量,或者如果您在某处被推荐,那么您的应用程序的队列可能会增长到一定程度,以至于您的 Web 应用程序会运行得非常慢,甚至更糟,可能会导致超时。为了防止这种情况,当流量增加时,HireFire 将自动扩展您的 Web Dynos,以确保应用程序始终快速运行。当流量下降时,HireFire 将再次关闭您的 Web Dynos。
—— 来自 HireFire 的首页
它支持以下 Python 队列系统作为后端
如果您使用的是不同的队列系统,请随时贡献其他后端。
安装
使用您喜欢的安装程序安装 HireFire 包,例如
pip install HireFire
在 HireFire 上注册并使用 Heroku CLI(如特定 HireFire 应用程序页面 上提供的那样)设置 HIREFIRE_TOKEN 环境变量,例如
heroku config:set HIREFIRE_TOKEN=f69f0c0ddebe041248daf187caa6abb3e5d943ca
现在请遵循下面的快速入门指南,并不要忘记在 HireFire 管理系统 中调整选项。
如需更多帮助,请参阅 Hirefire 文档。
配置
目前,hirefire Python 包支持三个框架:Django、Tornado 和 Flask。其他框架的实现计划中,但尚未着手:Pyramid (PasteDeploy)、WSGI 中间件、..
如果您无法等待,请随时贡献一个。
以下指南假设您已定义至少一个与 Procfile 中的进程相匹配的 hirefire.procs.Proc 子类。对于您要监控的每个进程,您必须有一个子类。
例如,以下是一个使用 RQ 的“worker”进程的 Procfile。
web: python manage.py runserver worker: DJANGO_SETTINGS_MODULE=mysite.settings rqworker high default low
在项目的某个地方定义一个 RQProc 子类,例如 mysite/procs.py,并具有适当的属性(name 和 queues)
from hirefire.procs.rq import RQProc
class WorkerProc(RQProc):
name = 'worker'
queues = ['high', 'default', 'low']
如果您使用的是其他后端,请参阅 procs API 文档。现在请遵循以下针对特定框架的指南。
Django
设置 HireFire 对 Django 的支持非常简单
将 'hirefire.contrib.django.middleware.HireFireMiddleware' 添加到您的 MIDDLEWARE 设置
# Use ``MIDDLEWARE_CLASSES`` prior to Django 1.10 MIDDLEWARE = [ 'hirefire.contrib.django.middleware.HireFireMiddleware', # ... ]
确保它是列表/元组中的第一项。
将 HIREFIRE_PROCS 设置为您的 procs 的点分路径列表。对于上面的示例 proc
HIREFIRE_PROCS = ['mysite.procs.WorkerProc']
将 HIREFIRE_TOKEN 设置为 HireFire 在特定 应用程序页面 上显示的令牌(可选)
HIREFIRE_TOKEN = 'f69f0c0ddebe041248daf187caa6abb3e5d943ca'
这仅在您尚未设置 HIREFIRE_TOKEN 环境变量的情况下需要(有关在 Heroku 上如何设置,请参阅安装部分)。
将 'hirefire.contrib.django.middleware.QueueTimeMiddleware' 添加到您的 MIDDLEWARE 设置以启用 HireFire 根据 Heroku 请求队列时间的缩放支持(可选)。
# Use ``MIDDLEWARE_CLASSES`` prior to Django 1.10 MIDDLEWARE = [ 'hirefire.contrib.django.middleware.HireFireMiddleware', # ... ]
确保将其放置在列表/元组中的任何其他项之前,以便尽可能准确地计算请求队列时间。
通过在浏览器中打开以下 URL 来检查中间件是否已正确设置
http://localhost:8000/hirefire/test
您应该看到一个空页面,上面写着“HireFire Middleware Found!”。
您还可以查看 HireFire 用于获取当前任务数量的页面
http://localhost:8000/hirefire/<HIREFIRE_TOKEN>/info
在需要替换 <HIREFIRE_TOKEN> 的地方,请用您的令牌替换,或者 - 如果您还没有在设置或环境中设置令牌 - 只需使用 development。
Tornado
为 Tornado 设置 HireFire 支持也很简单
在定义您的 tornado.web.Application 实例时使用 hirefire.contrib.tornado.handlers.hirefire_handlers
import os from hirefire.contrib.tornado.handlers import hirefire_handlers application = tornado.web.Application([ # .. some patterns and handlers ] + hirefire_handlers(os.environ['HIREFIRE_TOKEN'], ['mysite.procs.WorkerProc']))
确保向 hirefire_handlers 函数传递一个点分隔路径的列表。
将 HIREFIRE_TOKEN 环境变量设置为 HireFire 在特定 应用程序页面 上显示的令牌(可选)
export HIREFIRE_TOKEN='f69f0c0ddebe041248daf187caa6abb3e5d943ca'
有关在 Heroku 上如何执行此操作的说明,请参阅上面的安装部分。
通过在浏览器中打开以下 URL 来检查处理器的设置是否正确
http://localhost:8888/hirefire/test
您应该看到一个空页面,上面写着“HireFire Middleware Found!”。
您还可以查看 HireFire 用于获取当前任务数量的页面
http://localhost:8888/hirefire/<HIREFIRE_TOKEN>/info
在需要替换 <HIREFIRE_TOKEN> 的地方,请用您的令牌替换,或者 - 如果您还没有将令牌设置为环境变量 - 只需使用 development。
Flask
为 Flask 设置 HireFire 支持也很简单(再次!)
hirefire.contrib.flask.blueprint 模块提供了一个 build_hirefire_blueprint 工厂函数,该函数应使用 HireFire 令牌和进程作为参数调用。结果是提供 hirefire 路由的蓝图,该蓝图应在您的应用程序内部注册
import os from flask import Flask from hirefire.contrib.flask.blueprint import build_hirefire_blueprint app = Flask(__name__) bp = build_hirefire_blueprint(os.environ['HIREFIRE_TOKEN'], ['mysite.procs.WorkerProc']) app.register_blueprint(bp)
确保向 build_hirefire_blueprint 函数传递一个点分隔路径的列表。
将 HIREFIRE_TOKEN 环境变量设置为 HireFire 在特定 应用程序页面 上显示的令牌(可选)
export HIREFIRE_TOKEN='f69f0c0ddebe041248daf187caa6abb3e5d943ca'
有关在 Heroku 上如何执行此操作的说明,请参阅上面的安装部分。
通过在浏览器中打开以下 URL 来检查处理器的设置是否正确
http://localhost:8080/hirefire/test
您应该看到一个空页面,上面写着“HireFire Middleware Found!”。
您还可以查看 HireFire 用于获取当前任务数量的页面
http://localhost:8080/hirefire/<HIREFIRE_TOKEN>/info
在需要替换 <HIREFIRE_TOKEN> 的地方,请用您的令牌替换,或者 - 如果您还没有将令牌设置为环境变量 - 只需使用 development。
项目详情
下载文件
下载适用于您的平台的文件。如果您不确定要选择哪个,请了解有关 安装包 的更多信息。