现在Celery 4已经放弃了Windows支持,Windows上(Python 3)任务队列的最佳选择是什么?

我们在Windows下的IIS下运行Flask站点,对于进程外任务,我们使用Celery. Celery在Windows下给了我们一些问题,但是现在我们很满意运行版本3.1.12,使用RabbitMQ / AMQP作为后端,它可以在Windows下运行.Celery(4)的新版...

我们在Windows下的IIS下运行Flask站点,对于进程外任务,我们使用Celery. Celery在Windows下给了我们一些问题,但是现在我们很满意运行版本3.1.12,使用RabbitMQ / AMQP作为后端,它可以在Windows下运行.

Celery(4)的新版本有dropped support for Windows,所以我正在寻找一个可行的替代方案.

RQ似乎是一个非常好的任务队列,但它也不支持Windows(bottom of the page)

我已经看到了一些看起来不太受欢迎的任务队列,例如:

> kuyruk
> tasktiger
> huey

但目前还不清楚这些是否支持Windows和Flask.
我想知道是否有人在Windows下运行Python任务队列的经验.也许我提到的那个之一,或者另类.

我们不能选择运行Linux机器,因为我们没有管理Linux的经验,而且我们有许多运行需要Windows的遗留内容.

解决方法:

我在Windows上运行带有Huey的Flask没有任何问题,不可否认只是用于开发和测试.为了生产,我在Linux服务器上使用Flask / Huey.两者都是Redis后端,Flask 0.12和Huey 1.2.0.

我使用工厂模式创建Flask应用程序的专门“减少”版本,供Huey任务特定使用.此版本不加载蓝图或配置Flask-Admin,因为Huey任务中不需要这些.

app文件夹中__init__.py的示例代码. 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.检查其应用程序__init__.py及其extensions module,看看它是如何实现的.另请注意,此项目如何创建特定应用程序(create_celery_app)以与Celery任务队列一起使用.

tasks.py的示例.请注意使用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)

本文标题为:现在Celery 4已经放弃了Windows支持,Windows上(Python 3)任务队列的最佳选择是什么?

基础教程推荐