为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位版本)。
归属
单个实例装饰器受到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的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 8444cb5b718483de11f26e7ae2f803ebac4737d7e9421eefbb3c53020c57a07c |
|
MD5 | 8b2a3ccce0f723bd04b8e01ecca8d467 |
|
BLAKE2b-256 | 51b63e17d4d66732b0c71c44b101df75d13d5df0751404422e28acac271aadab |