一个易于使用的容器包装器。

Flask-Executor的Python项目详细描述


烧瓶执行器

Build StatusCoverage StatusPyPI VersionGitHub license

有时,您需要一个简单的任务队列,而不需要单独的工作进程或功能强大但复杂的库的开销。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.requestflask.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上的完整文档!

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
http POST请求Java CouchDB   java删除带有大量尾随0的浮点字符串上的科学符号   JavaEE5和Hibernate   java如何在Spring Social中获得比特定id更早的tweet   java是框架。revalidate()在事件后获取输出是否重要?   java为什么不能返回通用映射?   java如何理解和优化工厂方法的高自时间   java Eclipse 202006错误由于项目的生成路径不完整,因此未生成该项目   多线程是java。util。向量序列化线程安全?   在Eclipse和java中使用不同的构建配置。属性文件   编译Java:从命令行运行的问题   java如何知道消息是否已确认/取消?   Java铸造一套   java Android Seekbar progress已更改变量,给出错误