django settings 定义的变量不存在_使用Django部署机器学习模型(1)

4392ec6014d60c395af8c3da3bdaf8ef.png

介绍

机器学习(ML)应用的需求正在不断增长。许多资料显示了如何训练ML算法。然而,ML算法分为两个阶段:

  • 训练阶段——在这个阶段,基于历史数据训练ML算法,

  • 推理阶段——ML算法被用于计算对未知结果的新数据的预测。

商业利益就处于推理阶段,ML算法会在信息已知之前就提供它。如何为生产系统提供用于推理的ML算法是一个技术挑战。有许多需要满足的要求:

  • ML算法部署自动化,

  • 持续集成,

  • 算法和预测的再现性,

  • 生产中算法的诊断和监控,

  • 管理和法规符合性,

  • 可伸缩性,

  • 用户协作。

ML算法有很多使用方法:

  • 最简单的方法是在本地运行ML算法,对准备好的测试数据进行预测,并与他人共享预测结果。该方法实现简单、快速。然而,它有很多缺点。管理、监控、扩展和协作是很困难的。

  • 第二种类似的方法是在系统代码中硬编码ML算法。这个解决方案更适合于简单的ML算法,比如决策树或线性回归(这些算法很容易独立于编程语言实现)。此解决方案的行为类似于第一种方法——它易于实现,但有许多缺点。

  • 第三个解决方案是通过REST API、RPC或WebSockets使ML算法可用。此方法需要实现一个能处理请求并将其转发给ML算法的服务器。在这种方法中,ML生产系统的所有需求都可以得到满足。

  • 最后一个解决方案是使用商业供应商来部署ML算法——它可以是在云中,也可以是在本地。有时候,这是一个很好的解决方案。当您有一个标准的ML算法时,那么供应商就可以处理它,并且您有钱支付给供应商(它可能有点昂贵)。

本教程提供了有关如何使用REST API构建您的ML系统的代码示例。在本书中,为了构建ML服务,我将使用Python 3.6和Django 2.2.4。这本书是第一部分,涵盖的基础应该足以构建您的ML系统,该系统:

  • 可以处理多个API端点,

  • 每个API端点可以有几个不同版本的ML算法,

  • ML代码和工件(带有ML参数的文件)被存储在代码存储库(git)中,

  • 支持快速部署和持续集成(服务器和ML代码测试),

  • 支持监控和算法诊断(支持A/B测试),

  • 可扩展(与容器一起部署),

  • 具有用户界面。

本教程可以通过多种方式进行扩展,例如:

  • 用Celery运行长时间的批量预测或算法训练任务,

  • 用Celery运行预定的任务,

  • 用于物联网应用程序的WebSocket接口(带有Django通道),

  • 身份验证和用户管理。

目前,本教程不涉及上述主题。我以后会根据读者的反馈来写它们。您可以使用这个表格给我进行反馈。

在我看来,构建ML系统有一个很大的优势——它是根据您的需要定制的。它具有ML系统中所需的所有特性,并且可以根据您的需要调整复杂性。。

本教程是为那些熟悉ML并希望了解如何构建ML web服务的读者准备的。需要基本的Python知识。本教程的完整代码在这里:https://github.com/pplonski/my_ml_service  。

开始

您将在这一章学到什么:

  • 如何设置git存储库,

  • 安装开发环境(我将使用Ubuntu 16.04),

  • 安装所需要的包,

  • 启动Django项目。

设置git存储库

为了建立一个git仓库,我使用了GitHub(它对公共和私有项目都是免费的)。如果您在那里有一个帐户,请访问https://github.com/new  并设置存储库,如图(1)所示。

ffd8edc628f7a6c8ebd9a86fa6461c40.png

图1:在github中设置一个新项目

本教程的完整代码在这里:https://github.com/pplonski/my_ml_service  。

然后进入您的终端并设置存储库:

847935fd993fb6d77e1fb97c9cdf2030.png

在我的例子中,存储库中有两个文件,即LICENSE和README.md。

安装

让我们设置并激活开发环境(我使用的是Ubuntu 16.04)。我将使用virtualenv:

1e04e29411b617027d9e434f1964b0f8.png

您每次在新终端开始项目工作时,都需要激活环境。

我将使用pip3来安装所需的软件包:

0e5160ec60006ddc503baadd32a1e0f9.png

我安装的Django版本是2.2.4。

启动Django项目

我将在backend目录中设置Django项目。Django项目名被设置为server。

ed3a420be11a6df2ceefd6c7c72fcf89.png

您可以使用以下命令来启动您的初始化的服务器:

474748cf372db1b0a919c273b193a2ec.png

当您在您喜欢的web浏览器中输入127.0.0.1:8000时,您应该会看到默认的Django欢迎站点(2)。

6a1055dcb7428f245a014590304c792f.png

图2:Django默认欢迎站点

恭喜您! ! !您已经成功地设置了环境。

>>> 今日签到口令:vb7o <<<

将源文件添加到存储库中

在进入下一章之前,让我们先提交新文件。

bc4943d76cb4b119e8af6155c6847fdc.png

以下文件应该会被添加到您的项目中:

070e5d64af5c4423da32103230714df3.png

在您的目录中,还有其他文件没有被添加到存储库中,因为.gitignore文件中排除了这些文件。

构建ML算法

在这一章您将学到:

  • 如何安装Jupyter notebook,

  • 如何构建两个ML算法,

  • 保存预处理细节和算法。

安装Jupyter notebook

为了构建ML算法,我使用了Jupyter notebook。您可以轻松安装它:

0a864bdb555aa8797aeefa21b2762426.png

要设置Jupyter notebook使用本地virtualenv环境,您可以运行运行:

23c728432ecc5b728c8292fba7a35a40.png

我将创建一个research目录用于存放Jupiter文件。要启动Jupyter notebook ,请运行:

bc942f1a274e49762655843887d90b7a.png

启动一个新notebook时,请确保您选择了正确的内核,在我们的示例中是venv(图3)。

045733990ede96aaddf0878295d65620.png

图 3: 启动新的jupyter notebook

训练ML 算法

在构建ML算法之前,我们需要安装所需包:

d1dcae6c3eb6889360363cfc31e70fd4.png

numpy和pandas包用于数据操作。joblib用于ML对象的保存。然而,sklearn包提供了广泛的ML算法。在安装这些包之后,我们需要重新加载Jupyter。

我们代码的第一步是加载包:

bf5feb874c261efc5690f1ee70275f32.png

加载数据

在本教程中,我将使用Adult Income数据集。在这个数据集中,ML将被用来根据人口普查数据预测收入是否超过每年5万美元。我将从我的公共存储库中加载数据,这些数据集适用于ML入门。

加载数据并显示第一行数据的代码(图4):

24347bfc023937aca8511a6522e0e76b.png

03ad425a56917506cc6749a903a64736.png

图4:我们数据集的第一行

X矩阵有32,561行14列。这是我们算法的输入数据,每一行描述一个人。y向量有32,561个值,表示年收入是否超过5万每年。

在开始数据预处理之前,我们将把数据分成训练和测试子集。我们将使用30%的数据进行测试。

df634fc1cb609baf16d8e56768d01588.png

数据预处理

在我们的数据集中,有缺失的值和分类列。对于ML算法训练,我将使用sklearn包中的随机森林(Random Forest)算法。在当前的实现中,它不能处理缺失值和分类列,这就是为什么我们需要应用预处理算法。

为了填充缺失的值,我们将在每一列中使用最频繁的值(当然还有许多其他的填充方法,我选择的只是作为示例)。

8d1bcf7b34c04ccf18237a781dca7d28.png

train_mode值看起来像这样:

aa58aa2dde5c8ded643805bd1c233c49.png

从train_mode中您可以看到,例如在age列中最常见的值是31.0。

让我们把范畴转换成数字。我将使用来自sklearn包的LabelEncoder:

bad4b43dd351efc48ae97bf3dc1dc1ea.png

算法训练

数据已经准备好了,所以我们就可以训练我们的随机森林算法。

08986778e4adc1f2272446c51ed0c187.png

我们还将训练极端随机树(Extra Tree)算法:

d0c53fdb2401869524b71cea8e81a894.png

正如您所看到的,训练算法很简单,只需两行代码—比数据读取和预处理要少得多。现在,让我们保存我们创建的算法。需要注意的重要一点是,ML算法不仅是rf和et变量(带有模型权值),而且我们还需要保存预处理变量train_mode和encoders。为了保存,我将使用joblib包。

b29515e1204a0a7563e707266b841a55.png

将ML代码和部件添加到存储库中

在继续下一章之前,让我们将我们的notebook和文件添加到存储库中。

1eda55c528643d2188a49ce999d24d57.png

每个带有预处理对象和算法的文件都小于100 MB,这是GitHub的文件限制。对于较大的文件,最好使用单独的版本控制系统,如DVC——然而,这是一个更高级的主题。

Django模型

您已经实现了什么:

  • 您已经初始化了默认的Django项目,

  • 您已经训练了两个ML算法并准备好进行推理。

您将在这一章学到什么:

  • 构建Django模型来在数据库中存储关于ML算法和请求的信息,

  • 使用Django REST框架为ML算法编写REST API。

创建Django 模型

为了创建Django模型,我们需要创建一个新的应用程序:

28cd125a68e3f7f6feb2e7dc2c4969b5.png

使用上述命令,我们创建了endpoints应用程序并将其移动到apps目录。我已经添加了apps目录来保持项目的整洁。

d7d62f2ad91a8b206f29e2d5c3363ea1.png

让我们进入apps/endpoints/models.py文件并定义数据库模型(Django提供对象关系映射层(ORM))。

2942348bccc1cab8d322c096581b2f80.png

06d87203eeffc72fdbc57fe0b7d83ca0.png

我们定义了三个模型:

  • Endpoint——保存关于端点的信息,

  • MLAlgorithm——保存服务中使用的ML算法的信息,

  • MLAlgorithmStatus——保存关于ML算法状态的信息。状态可以随时间变化,例如,我们可以将测试设置为初始状态,然后在测试期间切换到生产状态。

  • MLRequest——保存所有到ML算法的请求的信息。监控ML算法和运行A/B测试需要用到它。

我们需要将我们的应用程序添加到backend/server/server/settings.py中的INSTALLED_APPS,它应该是这样的:

77247ef3a724d5d01d06dd460981c758.png

要将我们的模型应用到数据库,我们需要运行迁移:

baa4da05d75d5c1eff98d9320e02f3be.png

上面的命令将在数据库中创建表。默认情况下,Django使用SQLite作为数据库。对于本教程,我们可以保留这个简单的数据库,对于更高级的项目,您可以将Postgres或MySQL设置为数据库(您可以通过在backend/server/server/settings.py中设置DATABASES变量来配置这一点)。

为模型创建REST API

到目前为止,我们已经定义了数据库模型,但是在运行web服务器时我们不会看到任何新内容。我们需要为我们的对象指定REST API。实现此目的的最简单和最干净的方法是使用Django REST框架(DRF)。要安装DRF,我们需要运行:

85b9f7612fdc95af927b213758a44eb7.png

并将其添加到backend/server/server/settings.py中的INSTALLED_APPS:

3edbc3b558e9b9d4167975209b851dff.png

要在浏览器中看到一些东西,我们需要定义:

  • 序列化器——它们将定义数据库对象如何在请求中进行映射,

  • 视图——我们的模型如何在REST API中被访问,

  • url——为我们的模型定义REST API URL地址。

DRF序列化器

请将serializers.py文件添加到server/apps/endpoints目录:

17ac04e1584423520676c63eed46e0aa.png

0cf43051fd8b3ed49830abeeabad4742.png

序列化器将有助于将数据库对象打包和解包成JSON对象。在Endpoints和MLAlgorithm序列化器中,我们定义了所有只读字段。这是因为,我们将只在服务器端创建和修改对象。对于MLAlgorithmStatus,字段 status、 created_by、 created_at 和 parent_mlalgorithm处于读写模式,我们将使用它们通过REST API来设置算法状态。对于MLRequest序列化器,有一个处于读写模式的feedback字段——我们需要它来向服务器提供关于预测的反馈。

MLAlgorithmSerializer比其他的更复杂。它有一个current_status字段,代表MLAlgorithmStatus的最新状态。

视图

要添加视图,请打开backend/server/endpoints/views.py文件并添加以下代码:

cf6689168f80be7b919de58532ab21ec.png

419ce946eb6e8e742c3bfb243b75852e.png

对于每个模型,我们都创建了一个视图,该视图允许检索单个对象或对象列表。我们将不允许通过REST API创建或修改Endpoints、 MLAlgorithms。处理新ML相关对象创建的代码将位于服务器端,我将在下一章中讨论它。

我们将允许通过REST API创建MLAlgorithmStatus对象。我们不允许编辑ML算法的状态,因为我们想要保留所有的状态历史。

我们允许编辑MLRequest对象,但是只有feedback字段(请查看序列化器定义)。

URL

最后一步是添加URL来访问我们的模型。请在backend/server/apps/endpoints中的urls.py文件中添加以下代码:

1dd352f0edcecdc778aee8af1aa05e4f.png

上面的代码将创建到我们数据库模型的REST API路由器。我们的模型将按照以下URL模式被访问:

76e5da8b08b7c6a272caff8ce3bd139d.png

您可能注意到,我们在API地址中包含了v1。这可能在以后的API版本控制中会需要。

我们需要将端点url添加到服务器的主urls.py文件(文件backend/server/server/urls.py):

58c2c3d2de4d66b49c49f02f074fc294.png

运行服务器

我们添加了很多新东西,让我们检查一下它们是否都可以运行。

请运行服务器:

f2716ab6c6651f2782c97e7feeb203d4.png

并在web浏览器中打开http://127.0.0.1:8000/api/v1/。您应该会看到DRF视图(图5)。

66cae6081028c8c518dd9c3f4b56f185.png

图5:默认的Django REST框架视图

DRF提供了很好的接口,因此您可以单击任何URL并检查其对象(例如在http://127.0.0.1:8000/api/v1/endpoints上)。您应该会看到所有对象的空列表,因为我们还没有添加任何东西。我们将在下一章中添加ML算法和端点。

向存储库添加代码

本章的最后一步是向存储库添加新代码。

4b06b7f887bfd65fcfb2a334a0260a1d.png

将ML算法添加到服务器代码中

到目前为止,您已经完成了:

  • 训练两个ML算法,

  • 使用数据库模型和REST API端点创建了Django服务器,这些端点将表示ML端点、模型和请求。

您将在这一章学到什么:

  • 在服务器中创建ML代码,

  • 写ML算法注册表,

  • 向服务器添加ML算法。

服务器中的ML代码

在第3章中,我们创建了两个ML算法(随机森林和极端随机树)。它们是在Jupyter notebook中实现的。现在,我们将在服务器端编写使用以前训练过的算法的代码。在本章中,我们将只在服务器端包含随机森林算法(为了简单起见)。

我们来在 backend/server/apps目录中创建新目录ml来保存所有ML相关的代码,和income_classifier目录来保存我们的输入分类器。

0a8060508413247897579dfce4df2e2f.png

让我们在income_classifier目录中添加新文件random_forest.py和空文件 __init__.py。

我们将在random_forest.py文件中实现ML算法。

9b06ad68effa0354843712e278773fd9.png

fff18ba255adb188037e019efb741189.png

RandomForestClassifier算法有五个方法:

  • __init__ -加载预处理对象和随机森林对象的构造函数(使用Jupyter notebook创建),

  • preprocessing - 该方法接受输入的JSON数据,将其转换为Pandas DataFrame并对其应用预处理,

  • predict - 该方法会调用ML对准备的数据进行计算预测,

  • postprocessing - 该方法会对预测值应用后处理,

  • compute_prediction - 该方法结合了 preprocessing、 predict 和 postprocessing,并返回带有响应的 JSON 对象。

要在Django中启用我们的代码,我们需要将ml应用程序添加到backend/server/server/settings.py中的INSTALLED_APPS:

aafc4a6c26eeaea8981a063a02f312e0.png

ML代码测试

让我们编写一个测试用例来检查我们的随机森林算法是否按预期工作。为了进行测试,我将使用来自训练数据中的一行,并检查预测是否正确。

请使用以下代码将空的__init__.py和tests.py两个文件添加到ml目录中:

523722b27e8478d9a143e8e4d0260203.png

以上测试是:

  • 构造一个输入JSON数据对象,

  • 初始化ML算法,

  • 计算ML预测并检查预测结果。

要运行Django测试,请运行以下命令:

1b606dc761dafa69969dd64674cf24cd.png

您应该看到1个测试运行了。

738c9e65182ba2a36b126f4093c9e5e6.png

算法注册表

我们已经准备好并测试了ML代码。我们需要将它与服务器代码连接起来。为此,我将创建ML 注册表对象,它将保存有关可用算法和相应端点的信息。

让我们在backend/server/apps/ml/目录中添加registry.py文件。

77a49ca350a0a1e56d2e0d848f4849f6.png

该注册表通过一个算法id到算法对象映射来保存简单的dict对象。

要检查代码是否按预期工作,我们可以在backend/server/apps/ml/tests.py文件中添加测试用例:

fddda4b91e51c2098716915e7880779f.png

这个简单的测试向注册表添加了一个ML算法。运行测试:

a5322e0274e649b1bc201f4d7a9320ec.png

测试输出:

702477239d36dd305a8779438808652e.png

将ML算法添加到注册表

注册表代码已经准备好了,我们需要在服务器代码中指定一个位置,在服务器启动时将ML算法添加到注册表中。最好的地方是backend/server/server/wsgi.py文件。请在该文件中设置以下代码:

51b5da92d369a8177f393fbe158a54b4.png

使用以下命令启动服务器后:

58b0e6c2c1ce9ef65d489c72dc670935.png

您可以在浏览器中检查端点和ML算法。在URL:http://127.0.0.1:8000/api/v1/endpoints,您可以检查端点(图6),而在http://127.0.0.1:8000/api/v1/mlalgorithms,您可以检查算法(图7)。

7e5427618088f09528af10a1ab59967e.png

图6:服务中定义的端点列表

c08fb8e4e03fcbedb48d992511f58f80.png

图7:服务中定义的ML算法列表

向存储库添加代码

我们需要向存储库提交新代码。

c0c660e7c11156e0e13dc17d90528a3f.png

接下来是什么?

我们已经将ML算法存储在数据库中,我们可以使用REST API访问关于它的信息,但是如何进行预测呢?这将是下一章的主题。

进行预测

您已经学习了什么:

  • 您已经在Jupyter notebook中创建了两个ML算法,

  • 您已经创建了带有数据库模型和REST API的Django应用程序,

  • 您已经将ML代码添加到服务器代码并创建了一个ML注册表。

您将在这一章学到什么:

  • 您将添加一个视图来处理服务器中的请求并将其转发到ML代码,

  • 您将向视图添加API URL,

  • 您将为预测编写测试。

英文原文:https://www.deploymachinelearning.com/ 
译者:浣熊君( ・᷄৺・᷅ )

bfe59429f8b77c7dc29990d09ba1d9ab.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/335435.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php系统函数区分大小写,php函数名区分大小写吗?

PHP对大小写敏感问题的处理比较乱&#xff0c;写代码时可能偶尔出问题&#xff0c;所以下面本篇文章就来总结一下。有一定的参考价值&#xff0c;有需要的朋友可以参考一下&#xff0c;希望对你有所帮助。但我不是鼓励大家去用这些规则。推荐大家始终坚持“大小写敏感”&#x…

python条形堆积图_python – 使用DataFrame.plot显示堆积条形图中...

您可以使用plt.text根据数据将信息放在位置. 但是,如果你有非常小的条形,可能需要一些调整才能看起来很完美. df_total df[Total Cost] df df.iloc[:, 0:4] df.plot(x Airport, kindbarh,stacked True, title Breakdown of Costs, mark_right True) df_rel df[df.column…

mega2560单片机开发_[MEGA DEAL] Ultimate Java开发和认证指南(59%折扣)

mega2560单片机开发通过介绍世界上最受欢迎的编程语言之一掌握Java编程概念 嘿&#xff0c;怪胎&#xff0c; 本周&#xff0c;在我们的JCG Deals商店中 &#xff0c;我们提供了一个极端的报价 。 我们提供的《 Ultimate Java Development and Certification Guide 》 仅售2…

java界面 文件选择器_掌握java技术 必备java工具应用知识

在现如今的互联网时代里&#xff0c;Java无疑是一种极为流行的开发语言&#xff0c;无论是程序界还是整个互联网行业势必带来很大的影响。不管是人才需求还是薪资水平上&#xff0c;Java的发展前景都是很乐观的。关于Java的一些常用的工具&#xff0c;也是需要我们不断去掌握和…

禅道项目管理系统里面的「产品」与「项目」的区别和关系

产品与项目的区别和关系 产品主要是管理需求、计划和发布。一个产品可能分解成多个小项目&#xff0c;由一个或多个项目组去完成。 项目主要是管理任务开发需求。禅道里&#xff0c;项目对应的是敏捷开发里的迭代。项目可以看做产品的迭代管理&#xff0c;一个项目更新产品的…

triplet loss后面不收敛_你的神经网络真的收敛了么?

1、为什么小模型的作为backbone效果会差&#xff1f;在深度学习目标检测(图像分割)领域&#xff0c;我们发现当我们使用层数越深&#xff0c;并且在imagenet上表现越好的分类网络作为backbone时&#xff0c;它的检测和分割效果越好效果越好。比如我们使用resnet101作为backbone…

php文件上传漏洞waf,文件上传绕过WAF

文件上传文件上传实质上还是客户端的POST请求&#xff0c;消息主体是一些上传信息。前端上传页面需要指定enctype为multipart/from-data才能正常上传文件。此处不讲各种中间件解析漏洞只列举集几种safe_dog对脚本文件上传拦截的绕过靶机环境&#xff1a;win2003safe_dog4.0.239…

java性能监视_Java 9和应用程序性能监视的激动人心之处

java性能监视通过AppDynamics解决应用程序问题的速度提高了10倍–以最小的开销在代码级深度监视生产应用程序。 开始免费试用&#xff01; 在当今的现代计算时代&#xff0c;软件创新的不断增强使我们更接近软件革命的时代。 也许在遥远的未来&#xff0c;这可能是对21世纪记忆…

C# 监控字段_有哪些好的C#开源项目推荐?

作者&#xff1a;码云 Gitee链接&#xff1a;https://www.zhihu.com/question/27993498/answer/1014561869

并行流 线程池_使用自定义线程池处理并行数据库流

并行流 线程池并行数据库流 在上一篇文章中 &#xff0c;我写了关于使用并行流和Speedment并行处理数据库内容的文章。 在许多情况下&#xff0c;并行流可能比通常的顺序数据库流快得多。 线程池 Speedment是一个开源的Stream ORM Java工具包和Runtime Java工具&#xff0c;它…

hibernate框架 最新_java框架,使用最频繁的9个程序!

Java在多年的发展历程中&#xff0c;已证明自己是为软件开发而生的顶级通用编程语言。Java 广泛用于科学和教育&#xff0c;金融&#xff0c;法律和政府等许多行业。Java 是开源和面向对象的&#xff0c;其开发目的是使应用程序开发人员可以编写一次然后在任何地方运行。编译后…

twilio_15分钟内使用Twilio和Stormpath在Spring Boot中进行身份管理

twilio建筑物身份管理&#xff0c;包括身份验证和授权&#xff1f; 尝试Stormpath&#xff01; 我们的REST API和强大的Java SDK支持可以消除您的安全风险&#xff0c;并且可以在几分钟内实现。 注册 &#xff0c;再也不会建立auth了&#xff01; 今天&#xff0c;不到30秒左右…

unity webgl读写txt文件_python Files文件读写操作

今天学习python的Files文件读写操作&#xff0c;并记录学习过程欢迎大家一起交流分享。首先新建一个文本文件test.txt&#xff0c;内容如下:hello worldhello youhello mehello pythonhello universe然后新建一个python文件命名为py3_file.py&#xff0c;在这个文件中进行操作代…

垃圾收集 java_Java的内置垃圾收集如何使您的生活更美好(大部分时间)

垃圾收集 java通过从您的应用程序学习企业APM产品&#xff0c;发现更快&#xff0c;更有效的性能监控。 参加AppDynamics APM导览&#xff01; “无需为用户编写将寄存器返回到自由存储列表的程序。” 这条线&#xff08;以及随后的十几条线&#xff09;被埋在约翰麦卡锡&…

python函数的使用方法_百度资讯搜索_python函数的使用方法

金生水起程序猿 2020年11月22日 11:23函数语法格式及调用参数:默认值、元组和字典可变参数的使用全局变量和局部变量作用域,局部变量如何升级为全局变量函数是可重复使用的,实现单一功能的代码块。可以把项...百度快照金生水起程序猿 2020年11月22日 12:13函数类型定义:python中…

red hat 4.1.2_安装Red Hat Container Development Kit 2.2版本

red hat 4.1.2当应用程序开发人员或架构师负责探索容器化应用程序提供的可能性时&#xff0c;没有比“红帽容器开发套件”&#xff08;CDK&#xff09;容易的了。 Red Hat CDK具有本地OSX&#xff0c;Linux或Windows环境所需的所有Cloud工具&#xff0c;并且已预先配置了一些容…

高斯背景建模 matlab,高斯背景建模整理 – 要饭的

OpenCV 中高斯背景建模相关论文BackgroundSubtractorMOG:Paper : An Improved Adaptive Background Mixture Model for Real-time Tracking with Shadow DetectionWebsite : http://personal.ee.surrey.ac.uk/Personal/R.Bowden/publications/avbs01/avbs01.pdf创新点 &#x…

apache ignite_使用Apache Storm和Apache Ignite进行复杂事件处理(CEP)

apache ignite在本文中&#xff0c; “使用Apache Ignite进行高性能内存计算”一书的作者将讨论使用Apache Strom和Apache Ignite进行复杂的事件处理。 本文的一部分摘自 书 。 术语“复杂事件处理”或CEP没有广泛或高度接受的定义。 Wikipedia的以下引用可以简要描述什么是复…

tpm php,TPM系列

近来一直在整理资料&#xff0c;刚好看到有比较详细的介绍&#xff0c;就发扬一下“拿来主义”吧&#xff1a;)顺便鄙视一下某安全网站转载我的博客很乱&#xff1a;(1、安装环境准备1.1内核Linux内核2.6.12版本及以上&#xff0c;提供了对tpm芯片的支持&#xff0c;下载地址&a…

zookeeper 日志查看_每天使用的注册中心zookeeper,流量暴涨怎么办?

通过本文能学习什么&#xff1f;初步了解zookeeper监控如何运用tcpdump Wireshark抓包分析Dubbo在zookeeper上节点设计如何查看zookeeper节点快照背景zookeeper作为dubbo的注册中心&#xff0c;承载着服务的基础信息(方法名&#xff0c;分组&#xff0c;版本等)&#xff0c;服…