一个易于使用的容器包装器。
Flask-Executor的Python项目详细描述
烧瓶执行器
有时,您需要一个简单的任务队列,而不需要单独的工作进程或功能强大但复杂的库的开销。flask executor是concurrent.futures
模块的一个易于使用的包装器,它允许您通过常用的flask应用程序模式初始化和配置执行器。这是使用轻量级进程内任务队列快速启动和运行的好方法。
安装
瓶执行器可在PYPI上使用,并可安装:
pip install flask-executor
快速启动
下面是在烧瓶应用程序中使用烧瓶执行器的快速示例:
fromflaskimportFlaskfromflask_executorimportExecutorapp=Flask(__name__)executor=Executor(app)defsend_email(recipient,subject,body):# Magic to send an emailreturnTrue@app.route('/signup')defsignup():# Do signup formexecutor.submit(send_email,recipient,subject,body)
上下文
当调用submit()
或map()
烧瓶执行器时,将用
当前应用程序上下文和当前请求上下文的副本。必须运行的代码
这些上下文或依赖于存储在flask.current_app
中的信息或配置的上下文,
flask.request
或flask.g
可以提交给执行者而无需修改。
注意:由于python默认对象序列化的限制和子进程之间缺乏共享内存空间,上下文不能推送到ProcessPoolExecutor()
工作进程。
未来
您可能希望保留对执行者返回的期货的访问权,以便可以检索 导致应用程序的不同部分。烧瓶执行器允许期货存储在 执行器本身,并提供在 应用程序:
@app.route('/start-task')defstart_task():executor.submit_stored('calc_power',pow,323,1235)returnjsonify({'result':'success'})@app.route('/get-result')defget_result():ifnotexecutor.futures.done('calc_power'):returnjsonify({'status':executor.futures._state('calc_power')})future=executor.futures.pop('calc_power')returnjsonify({'status':done,'result':future.result()})
装饰
flask executor允许您以与分布式任务队列相同的样式装饰方法,如 芹菜:
@executor.jobdeffib(n):ifn<=2:return1else:returnfib(n-1)+fib(n-2)@app.route('/decorate_fib')defdecorate_fib():fib.submit(5)fib.submit_stored('fibonacci',5)fib.map(range(1,6))return'OK'
默认回调
未来的对象可以通过使用Future.add_done_callback
附加回调。烧瓶执行器
允许您指定将应用于执行者创建的所有新期货的默认回调:
defsome_callback(future):# do something with futureexecutor.add_default_done_callback(some_callback)# Callback will be added to the below task automaticallyexecutor.submit(pow,323,1235)
传播异常
通常,除非显式地 检查过了。若要显示后台任务引发的所有异常,Flask执行器可以添加 一个特殊的默认回调,它引发提交给执行器的任务引发的任何异常:
app.config['EXECUTOR_PROPAGATE_EXCEPTIONS']=True
文档
查看flask-executor.readthedocs.io上的完整文档!