我在 Windows 上使用 Huey 运行 Flask 没有任何问题,诚然仅用于开发和测试。对于生产,我在 Linux 服务器上使用 Flask/Huey。两者都使用 Redis 后端,Flask 0.12 和 Huey 1.2.0。
我使用工厂模式来创建一个专门的“精简”版本的 Flask 应用程序,供 Huey 任务使用。此版本不加载蓝图或配置 Flask-Admin,因为 Huey 任务中不需要这些。
__init__.py
app 文件夹中的示例代码。App
是一个扩展自 的类Flask
:
def create_app(settings_override=None):
app = App('app')
if settings_override:
app.config.from_object(settings_override)
else:
app.config.from_object(os.environ['APP_SETTINGS'])
from .ext import configure_extensions
configure_extensions(app, admin, load_modules=True)
# REST
import rest.api_v1
app.register_blueprint(api_v1_bp, url_prefix='/api/v1')
# ... and more suff
def create_huey_app():
app = App('huey app')
app.config.from_object(os.environ['APP_SETTINGS'])
from .ext import configure_extensions
configure_extensions(app, admin=None, load_modules=False)
return app
的想法configure_extensions
来自Quokka CMS。检查其app
__init__.py
及其扩展模块以了解其实现方式。还要注意这个项目如何创建一个特定的应用程序 ( create_celery_app
) 用于 Celery 任务队列。
的例子tasks.py
。注意with app.app_context():
创建 Flask 上下文的使用。现在我的函数可以访问诸如 Flask-Mail、Flask-SqlAlchemy (db, models) 等扩展。
@huey.task()
def generate_transaction_documents_and_email(transaction_id):
app = create_huey_app()
with app.app_context():
reports.generate_transaction_documents_and_email(transaction_id)
@huey.task()
def send_email(subject, recipients, text_body, html_body, attachments=[], cc=[]):
app = create_huey_app()
with app.app_context():
emails.send_email(subject, recipients, text_body, html_body, attachments, cc)
@huey.periodic_task(crontab(minute='30'))
def synchronize_mailing_list():
app = create_huey_app()
if app.config['CREATESEND_SYNCHRONIZE']:
_list_name = app.config['CREATESEND_LIST']
with app.app_context():
sync_delete_ar_subscribers(_list_name)
sync_add_ar_subscribers(_list_name)