Tôi chạy Flask với Huey trên Windows mà không có bất kỳ vấn đề nào, phải thừa nhận chỉ để phát triển và thử nghiệm. Để sản xuất, tôi sử dụng Flask/Huey trên máy chủ Linux. Cả hai với Redis back-end, Flask 0.12 và Huey 1.2.0.
Tôi sử dụng mẫu nhà máy để tạo phiên bản "cắt giảm" chuyên biệt của ứng dụng Flask để sử dụng cụ thể cho các tác vụ Huey. Phiên bản này không tải các bản thiết kế hoặc cấu hình Flask-Admin vì chúng không được yêu cầu trong các nhiệm vụ Huey.
Mã mẫu __init__.py
trong thư mục ứng dụng. App
là một lớp học kéo dài từ 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
Ý tưởng về configure_extensions
được lấy từ Quokka CMS. Kiểm tra app
__init__.py
và extensions module để xem cách triển khai thực hiện điều này. Cũng lưu ý cách dự án này cũng tạo ra một ứng dụng cụ thể (create_celery_app
) để sử dụng với hàng đợi nhiệm vụ Celery.
Ví dụ về tasks.py
. Lưu ý việc sử dụng with app.app_context():
để tạo ngữ cảnh Flask. Giờ đây, chức năng của tôi có quyền truy cập vào các tiện ích mở rộng như Flask-Mail, Flask-SqlAlchemy (db, mô hình), v.v.
@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)
Bạn đã bao giờ tìm thấy? Tôi đã tìm kiếm một trong hai tuần qua và không thể tìm thấy một trong đó vẫn còn phát triển. –
@KevinVasko; Huey là hình ảnh được sử dụng rộng rãi nhất. Tôi đã thử nghiệm nó, và nó đơn giản và nó hoạt động. Tuy nhiên, tôi đã tìm thấy một vấn đề lớn, và tác giả cũng không thể giúp tôi với nó; Tôi không thể sử dụng công nhân Huey cần một bối cảnh Flask. Tôi không thể tìm ra cách để vượt qua các nhiệm vụ bối cảnh này. Điều này ngăn tôi hiện đang sử dụng Huey. –
Cảm ơn bạn đã phản hồi, tôi sẽ kiểm tra Huey, tôi không phải làm việc với Flask để hy vọng rằng đó sẽ không phải là vấn đề.Tôi cũng tìm thấy một cái gọi là "WorQ", nhưng nó đã không được cập nhật trong 3 năm hoặc lâu hơn và nó không rõ ràng nếu nó hỗ trợ Windows hay không. –