跳转到主要内容

为Flask提供Celery支持,而不会破坏PyCharm检查。

项目描述

Flask-Celery-Tools

这是Flask-Celery-Helper的分支

尽管Flask文档说Celery扩展现在是
不必要的,但我发现我仍然需要一个扩展来正确地在大型Flask应用程序中使用Celery。具体来说
我需要在实例化后对Celery进行初始化的init_app()方法。

此扩展还包括一个single_instance方法。

  • Python PyPy, 3.6, 3.7和3.8支持Linux和OS X。
  • Python 3.6, 3.7和3.8支持Windows(Python的32位和64位版本)。

Build Status Windows Build Status Coverage Status Latest Version

归属

单个实例装饰器受到Ryan Roemer的启发。

支持的库

快速入门

安装

pip install Flask-Celery-Helper  

示例

基本示例

# example.py  
from flask import Flask  
from flask_celery import Celery  

app = Flask('example')  
app.config['CELERY_BROKER_URL'] = 'redis://localhost'  
app.config['CELERY_RESULT_BACKEND'] = 'redis://localhost'  
app.config['CELERY_TASK_LOCK_BACKEND'] = 'redis://localhost'  
celery = Celery(app)  

@celery.task()  
def add_together(a, b):  
    return a + b  

if __name__ == '__main__':  
    result = add_together.delay(23, 42)  
    print(result.get())  

在单独的终端中运行这两个命令

celery -A example.celery worker
python example.py

工厂示例

# extensions.py
from flask_celery import Celery

celery = Celery()
# application.py
from flask import Flask
from extensions import celery

def create_app():
    app = Flask(__name__)
    app.config['CELERY_IMPORTS'] = ('tasks.add_together', )
    app.config['CELERY_BROKER_URL'] = 'redis://localhost'
    app.config['CELERY_RESULT_BACKEND'] = 'redis://localhost'
    app.config['CELERY_TASK_LOCK_BACKEND'] = 'redis://localhost'
    celery.init_app(app)
    return app
# tasks.py
from extensions import celery

@celery.task()
def add_together(a, b):
    return a + b
# manage.py
from application import create_app

app = create_app()
app.run()

单实例示例

# example.py
import time
from flask import Flask
from flask_celery import Celery, single_instance
from flask_redis import Redis

app = Flask('example')
app.config['REDIS_URL'] = 'redis://localhost'
app.config['CELERY_BROKER_URL'] = 'redis://localhost'
app.config['CELERY_RESULT_BACKEND'] = 'redis://localhost'
app.config['CELERY_TASK_LOCK_BACKEND'] = 'redis://localhost'
celery = Celery(app)
Redis(app)

@celery.task(bind=True)
@single_instance
def sleep_one_second(a, b):
    time.sleep(1)
    return a + b

if __name__ == '__main__':
    task1 = sleep_one_second.delay(23, 42)
    time.sleep(0.1)
    task2 = sleep_one_second.delay(20, 40)
    results1 = task1.get(propagate=False)
    results2 = task2.get(propagate=False)
    print(results1)  # 65
    if isinstance(results2, Exception) and str(results2) == 'Failed to acquire lock.':
        print('Another instance is already running.')
    else:
        print(results2)  # Should not happen.

锁定后端

Flask-Celery-Tools支持您可使用的多个锁定后端

文件系统

文件系统锁定后端是在工作器运行的文件系统上使用文件锁,警告:此后端不适用于分布式任务!!!

Redis

Redis后端使用Redis存储任务锁,该后端适用于分布式任务。

数据库(MariaDB、PostgreSQL等)

数据库后端使用由SqlAlchemy支持的数据库存储任务锁,该后端适用于分布式任务。除了具有与文件系统后端相同限制的sqlite数据库。

更新日志

本项目遵循语义化版本控制

1.4.1 - 2020-11-10

* Require flask>=1.0.2

1.4.0 - 2020-11-04

* Migrate to new (4.0>) celery config names, just UPPERCASE and prefixed with CELERY_ this is BC break see https://docs.celeryproject.org/en/stable/userguide/configuration.html for new config key names

1.3.1 - 2020-11-03

* Celery 5 support added

1.2.9 - 2020-11-03

* Bump celery to version 4.4.7

1.2.7 - 2020-09-12

* Set username for twine in CI release

1.2.6 - 2020-09-10

* Fixed archlinux build

1.2.5 - 2020-09-10

* Update dependencies
* Fixed unittests

1.2.4 - 2018-11-03

* Append celery_self if task is bound

1.1.0 - 2014-12-28

新增 * Windows支持。 * 在Redis之外,SQLite/MySQL/PostgreSQL也支持single_instance

更改 * CELERY_RESULT_BACKEND不再强制。 * 破坏性更改:flask.ext.celery.CELERY_LOCK移动到flask.ext.celery._LockManagerRedis.CELERY_LOCK

1.0.0 - 2014-11-01

新增 * 支持非Redis后端。

0.2.2 - 2014-08-11

新增 * 支持2.6和3.x版本的Python。

0.2.1 - 2014-06-18

修复 * 使用functools修复single_instance参数。

0.2.0 - 2014-06-18

新增 * 为single_instance添加include_args参数。

0.1.0 - 2014-06-01

  • 首次发布。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码分发

Flask-Celery-Tools-1.4.3.tar.gz (11.3 kB 查看哈希值)

上传时间 源代码

由支持