西芹支持烧瓶,不打破皮查姆检查。
Flask-Celery-Helper的Python项目详细描述
尽管Flask documentation说芹菜扩展是 现在没必要了,我发现我仍然需要一个扩展来正确使用芹菜在大瓶应用。明确地 我需要一个init_app()方法在实例化芹菜之后对其进行初始化。
这个扩展还附带了一个single_instance方法。
- Linux和OS X支持Python 2.6、2.7、3.3和3.4。
- 在windows上支持python 2.7、3.3和3.4(python的32位和64位版本)。
归因
单实例装饰器灵感来自 Ryan Roemer。
快速启动
安装:
pip install Flask-Celery-Helper
示例:
# example.pyfromflaskimportFlaskfromflask.ext.celeryimportCeleryapp=Flask('example')app.config['CELERY_BROKER_URL']='redis://localhost'app.config['CELERY_RESULT_BACKEND']='redis://localhost'celery=Celery(app)@celery.task()defadd_together(a,b):returna+bif__name__=='__main__':result=add_together.delay(23,42)print(result.get())
在不同的终端上运行这两个命令:
celery -A example.celery worker python example.py
工厂示例
# extensions.pyfromflask.ext.celeryimportCelerycelery=Celery()
# application.pyfromflaskimportFlaskfromextensionsimportcelerydefcreate_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'celery.init_app(app)returnapp
# tasks.pyfromextensionsimportcelery@celery.task()defadd_together(a,b):returna+b
# manage.pyfromapplicationimportcreate_appapp=create_app()app.run()
单实例示例
# example.pyimporttimefromflaskimportFlaskfromflask.ext.celeryimportCelery,single_instancefromflask.ext.redisimportRedisapp=Flask('example')app.config['REDIS_URL']='redis://localhost'app.config['CELERY_BROKER_URL']='redis://localhost'app.config['CELERY_RESULT_BACKEND']='redis://localhost'celery=Celery(app)Redis(app)@celery.task(bind=True)@single_instancedefsleep_one_second(a,b):time.sleep(1)returna+bif__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)# 65ifisinstance(results2,Exception)andstr(results2)=='Failed to acquire lock.':print('Another instance is already running.')else:print(results2)# Should not happen.
更改日志
1.1.0
- 添加了Windows支持。
- CELERY_RESULT_BACKEND不再是必需的。
- ^除了redis之外,sqlite/mysql/postgresql还支持{tt1}$。
- 中断更改:flask.ext.celery.CELERY_LOCK已移动到flask.ext.celery._LockManagerRedis.CELERY_LOCK。
1.0.0
- 支持非redis后端。
0.2.2
- 增加了对Python2.6和3.x的支持。
0.2.1
- 用functools修复了single_instance参数。
0.2.0
- 向single_instance添加include_args参数。
0.1.0
- 初次发布。