现在,(Python 3)任务队列在Windows上的最佳选择是什么,因为芹菜4已删除Windows的支撑



我们在Windows上的IIS下方运行一个烧瓶站点,对于使用芹菜,我们使用的任务不足。芹菜在Windows下给了我们一些问题,但是目前,我们使用RabbitMQ/AMQP作为后端运行3.1.12,它在Windows下工作。

新版本的芹菜(4)已经放弃了对Windows的支持,因此我正在寻找可行的替代方案。

RQ似乎是一个非常好的任务队列,但它也不支持Windows(页面底部)

我看到了更多,似乎不太受欢迎的任务队列,例如:

  • kuyruk
  • TaskTiger
  • 休伊

,目前尚不清楚这些是否支持窗户和烧瓶。我想知道是否有人有经验在有效的Windows下运行Python任务队列。也许是我提到的之一,或者是替代方案。

对于我们来说,运行Linux机器不是一个选择,因为我们没有管理Linux的经验,而且我们有很多需要Windows的旧版物。

我在Windows上与Huey一起运行烧瓶,而没有任何问题,仅供开发和测试。为了生产,我在Linux服务器上使用烧瓶/Huey。两者都带有重新的后端,烧瓶0.12和Huey 1.2.0。

我使用工厂模式来创建专门的"切割"版本的烧瓶应用程序,以特定使用Huey Tasks。此版本不会加载蓝图或配置烧瓶 - 阿德蒙,因为在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。检查其app __init__.py及其扩展模块,以查看如何实现。还要注意该项目如何创建特定的应用程序(create_celery_app),以与芹菜任务队列一起使用。

tasks.py的示例。注意使用with app.app_context():创建烧瓶上下文。现在,我的功能可以访问扩展名,例如烧瓶,烧瓶-Sqlalchemy(DB,型号)等。

@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)

相关内容

  • 没有找到相关文章

最新更新