2017-02-20 15 views
10

Chúng tôi chạy một trang web Flask dưới IIS trên Windows và cho các tác vụ ngoài quy trình, chúng tôi sử dụng Celery. Celery đã cho chúng tôi một số vấn đề trong Windows, nhưng hiện tại chúng tôi rất hài lòng khi chạy phiên bản 3.1.12, sử dụng RabbitMQ/AMQP như một back-end, hoạt động trong Windows.Tùy chọn tốt nhất cho hàng đợi nhiệm vụ (Python 3) trên Windows hiện nay là Celery 4 đã giảm hỗ trợ Windows?

Phiên bản mới của Celery (4) có dropped support for Windows, vì vậy tôi đang tìm kiếm giải pháp thay thế khả thi.

RQ dường như một hàng đợi công việc rất tốt đẹp, nhưng nó cũng không hỗ trợ Windows (bottom of the page)

Tôi đã thấy một số chi tiết, hàng đợi công việc dường như ít phổ biến như:

Nhưng nó không rõ ràng nếu những hỗ trợ Windows và Flask. Tôi tự hỏi liệu có ai có kinh nghiệm chạy hàng đợi tác vụ Python trong Windows hoạt động không. Có lẽ một trong những người tôi đã đề cập, hoặc một sự thay thế. Nó không phải là một lựa chọn để chúng tôi chạy một máy Linux, bởi vì chúng tôi không có kinh nghiệm quản lý Linux, và chúng tôi có rất nhiều công cụ di sản chạy đòi hỏi Windows.

+0

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. –

+0

@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. –

+0

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. –

Trả lời

6

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__.pyextensions 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) 
+0

Cảm ơn bạn đã cung cấp thông tin này; Tôi sẽ cố gắng để thiết lập này cho bản thân mình và trở lại câu hỏi này sau đó. –

+0

Tôi đang thực hiện điều này, nhưng tôi không chắc chắn những gì bạn làm bên trong nhập cấu hình_extensions. Bạn có cân nhắc việc chia sẻ những gì diễn ra trong đó không? –

+0

@RicoSuave Tôi đã cập nhật câu trả lời của mình. – pjcunningham

Các vấn đề liên quan