python 关于热更新与热加载

pytest框架之热加载 阅读详情

聊聊热加载、热更新

知识有限,只谈谈自己对这块的了解,说的不对的地方还希望指出哈。
前段时间有个哥们说java微服务 有个配置中心spring cloud config 可以做到 配置文件热更新、热加载。基于此,提供一套Python 方案,当然对于spring来说,这个方案确实有点过于简陋(精简),尤其是如果用于微服务的时候。python 的微服务还不够完善,后续关注下nameko +py某web框架 有没有类似的方案,大家如果有时间也可以顺着spring 的方案弄一个呗,如果不觉得繁琐的话。当然如果项目不大的话,其实是可以直接重启呗,也就不到两秒钟的事情。看看各位的项目需要。

1、修改代码使用reload

其实就是在代码中import 相关模块,并用reload 方法重新加载相关参数,这种方法会实际上修改代码,在不需要重启服务的情况下,重新加载相关模块。在网上找了个简单的例子:https://blog.youkuaiyun.com/u013421629/article/details/89211695
只要提交代码到服务器上就可以了,简单粗暴,不需要重启。但是如果代码中有大量的地方需要reload。确实有点头大。

2、修改内存中的配置文件

因为项目的配置文件中的变量属于全局变量。这时候可以修改这个全局变量。这就更加简单了。提供一个接口(此处安全问题暂时忽略),传递配置文件相关参数。在接口中修改相关全局变量。

3 、autoreload

框架中的自动加载模块。试了几下,没成功,略过了,应该是可以的。

4、参照spring cloud config的方案。手动实现

原理介绍
springCloudConfig分服务端和客户端,服务端负责将本地,git或者svn中存储的配置文件发布成REST风格的接口,客户端可以从服务端REST接口获取配置。但客户端并不能主动感知到配置的变化,从而主动去获取新的配置,这需要每个客户端通过POST方法触发各自的/refresh接口。而我们上面说的SpringCloudBus就发挥了其作用了

SpringCloudBus通过一个轻量级消息代理连接分布式系统的节点(有点像消息队列那种)。这可以用于广播状态更改(如配置更改)或其他管理指令。SpringCloudBus提供了通过post方法访问的endpoint/bus/refresh(spring boot 有很多监控的endpoint,比如/health),这个接口通常由git的钩子功能(监听触发)调用,用以通知各个SpringCloudConfig的客户端去服务端更新配置。
在这里插入图片描述

git服务器会从远程git拉取配置文件,并存入到本地git文件库,当远程git不可用时,会从本地git文件库拉取配置信息

下面是一张spring cloud config结合bus的一张工作流图(来自于某大神)
在这里插入图片描述

Python 代码热加载与动态修改的实现方式 Python 提供了多种实现代码热加载和动态修改的方式,从标准库的importlib到第三方库 Watchdog,再到 IDE 的内置功能,每种方法都有其独特的优势和适用场景。选择合适的方法可以显著提高开发效率,减少重复劳动。无论你是初学者还是资深开发者,掌握这些技巧都能让你在 Python 开发中更加得心应手。希望本文的内容对你有所帮助!``` 阅读详情

相关推荐

python-47-flask应用代码热更新重新加载

热加载是指在程序运行时动态替换和重新加载模块或代码,而不需要重新启动整个应用程序。这种技术可用于在不间断运行的情况下更新代码、应用变更和改进,提高开发效率,加快调试过程。

qq_20466211的博客 1004

Python热更新功能:不重启服务器的情况下加载并执行新文件

的情况下加载并执行新文件。严格来说Python没有热更功能,但今天介绍这个功能可以实现该方法,就叫:“类热更”吧 – 类似热更新 …此处略去一万字,进入正题。然后将新文件my_config.py拖至server.py同级目录。在get1接口中添加新文件加载处理函数 load_sour()然后调用加载新文件接口:get1。文件加载处理函数.png。调用新文件函数.png。有时我们需要在不重启。

javasdn的博客 846

Python 爬虫高级实战:爬虫热更新与代码不重启加载

在传统 Python 爬虫项目运维模式中,代码迭代、规则修改、解析逻辑调整、配置变更、接口参数优化等操作,均需要停止爬虫进程、修改源码、重启服务才可生效。对于 7×24 小时不间断运行的分布式爬虫、常驻后台的定时采集任务、多节点集群抓取服务而言,频繁重启进程会引发任务中断、数据断层、重复抓取、队列堆积、节点调度异常等一系列生产问题。同时,批量重启多服务器爬虫节点,运维成本极高,极易引发全域爬虫风控触发风险。爬虫热更新技术,核心目标为不终止主进程、不中断抓取任务、不销毁连接池与资源句柄。

2503_91057718的博客 1074

vs2017编译qt project失败moc:Unknown compiler flavor ‘msvc;msvc‘; valid values are: msvc, unix.

1.原因:应该是QtVSTools的BUG 2.网上常规解决办法:卸载QtVSTools: VS2017菜单栏选择工具->扩展和更新,在弹出的扩展和更新页面,查看已安装的QtVisualStudioTools,选择卸载,卸载后关闭VS2017,重新安装旧的QtVisualStudioTools,重新导入pro文件并编译,并且在扩展和更新页面选择更改扩展和更新设置(左下角位置),禁用更新 3.请问怎么安装旧的???在哪里获取??? https://download.qt.io...

Change_208H 803

python代码热更原理及实现

热更,指程序具有在运行过程中修改代码,不重启,而直接生效的能力。热更对代码的微调,debug非常友好,不再需要重新启动程序,能直接在已有的上下文环境中直接测试。python 中有个 reload函数,会对模块进行重新加载,例如对模块 A 执行,reload(A),则模块 A 中的模块级内容会重新加载。不过,被reload的模块中,某个类已经生成的对象,依然指向的是旧模块的代码。也就是说,你在某个类的方法中添加了一行打印,热更之后这些已经存在的对象并不会生效。

qq_37744360的博客 5343

Workbench下列车转向架随机振动疲劳分析

结果中添加功率谱响应工具(Response PSD Tool),可以查看几何体以及远程点上的功率谱密度,如下图11所示,这里查看几何体上某一硬点的加速度功率谱密度响应曲线,如下图12所示。结果中添加疲劳工具(Fatigue Tool),查看列车转向架的疲劳寿命情况,这里采用窄带的寿命假设理论,曝光时间为1s指明计算出的疲劳寿命的基本单位是秒,寿命结果如下图14所示,可以看到最大寿命为1e35s,最小寿命为2.3542e18s,注意单位制,可再次基础上将其转换为小时或天。频域上的统计计算,软件很快计算完成。

ansysxuexizhe的博客 2605

python热更新代码、热加载、运行时更改代码

python热更新代码、热加载、运行时更改代码 用reload函数实现,注意在python3中reload在再是被基础库包含,而是归纳到了imp库中 代码在下面,复制即可用 #代码 from imp import reload import imp import time import 热更新 def main(): print("开始等待") time.sleep(30) p() def p(): print("更新前") # 改变这里以尝试 if __na

愿天堂没有 Time Limit Exceeded 3687

TortoiseGit之配置密钥

基于github的开发必须要用到rsa密钥,因此需要用到TortoiseGit的putty key generator工具,来生成既适用于github的rsa密钥也适用于TortoiseGit的ppk密钥。

欧文的博客 2087

python 算法模型 热加载_Python功能点实现:数据热更新

关键词:热更新 | 热重载 | 定时更新 | 即时更新 | 缓存 | functools | cachetools | LRU | TTL假设应用需要加载一个配置文件config.txt,一般的做法类似于:with open('config.txt') as f:parameters = f.read()接下来parameters中存储的数据就可以被其他代码使用,但是这样写的话程序每次启动后,数据...

weixin_39869593的博客 1059

张量积曲面:数学原理与Python实现

Suv∑i0m∑j0nPij⋅Bipu⋅BjqvSuvi0∑m​j0∑n​Pij​⋅Bip​u⋅Bjq​v其中PijP_{i,j}Pij​是控制点网格,BipuB_i^p(u)Bip​u和BjqvB_j^q(v)Bjq​v是基函数,分别沿uuu和vvv方向定义。

T20151470的博客 1159

要理解成本中心与利润中心的根本区别与适用场景,需从 “责任范围、考核核心、管理目标” 三个核心维度切入,同时明确二者在企业管理体系中的联动关系

摘要: 成本中心与利润核心区别在于责任范围、考核目标和管理权限。成本中心仅对成本负责(如生产、行政部门),考核成本控制能力;利润中心需同时管控成本与收入(如独立产品线、区域分公司),以利润为核心指标。选择标准取决于单元是否拥有收入决策权:无收入权的支持/执行部门设为成本中心,能独立经营、核算盈亏的单元设为利润中心。二者协同运作,成本中心为利润中心提供基础支持,利润中心的需求动态影响成本中心资源配置,共同实现企业整体目标。划分本质是确保考核指标与责任范围匹配,避免管理失效。

金牌架构师 658

为什么你的Python微服务卡在GIL?——多解释器热加载、热更新与无停机部署的终极方案

破解Python微服务GIL瓶颈,本文提供基于多解释器的热加载与无停机部署方案。涵盖多解释器启动、隔离通信、热更新实践等关键方法,适用于高并发微服务场景。含完整Python多解释器教程与生产级示例,值得收藏。

CompiTide的博客 287

使用 MATLAB/Simulink + Simscape Electrical 构建一个他励直流电机的启动与制动过程仿真模型

直流电机在工业控制、电动车辆、自动化设备中广泛应用。其中,他励直流电机(Separately Excited DC Motor)因其励磁绕组与电枢绕组分别供电,具有良好的调速性能和启动特性,常用于需要平稳启动和精确控制的场合。在实际应用中,电机的启动过程和制动过程对电网、机械系统以及电机本身都具有重要影响。因此,仿真分析他励直流电机的启动与制动特性,是电机控制设计的重要环节。本文将详细介绍如何使用构建一个他励直流电机的启动与制动过程仿真模型,并通过仿真分析其动态响应。本文详细介绍了如何使用构建一个。

amy_mhd的博客 233

Python插件热加载技术揭秘:实现智能体无缝扩展的3种方案

掌握Python智能体插件系统设计核心,本文揭秘3种热加载实现方案,支持模块动态扩展与无缝升级,适用于AI代理、自动化系统等场景,提升灵活性与可维护性,值得收藏。

BytePulse的博客 895

如何利用gretna软件计算脑网络全局属性(聚类系数,小世界属性,最短路径),局部属性指标(度,度分布,节点效率),如何理解网络稀疏度

grena工具箱被设计用于fMRI数据的图论网络分析。它是一套MATLAB函数和基于MATLAB的接口,用于常规的fMRI预处理,用于计算和统计分析最常用的网络指标,如小世界参数、效率、度、间性、关联性、层级性、同步性和模块化。......

从事脑科学核磁共振方法学研究,在Nature communications等权威期刊发表研究论文,熟练掌握磁共振处理方法和统计学方法,欢迎大家和我交流。 9175

串口通信协议

文章目录前言一、串口通信结构图二、电平三、串口通信协议 前言 本文记录的是平时常用的串口通信有关知识点 提示:以下是本篇文章正文内容,下面案例可供参考 一、串口通信结构图 1、RS232标准串口通讯结构图 2、USB转串口通讯结构图 3、原生的串口到串口 二、电平 串口通信的时候,有三种电平:TTL电平、RS232电平、USB电平 TTL电平是从MCU直接出来的电平 RS323是一种通讯标准,因为高电平+15V低电平–15V电位差30V容错空间大,抗干扰能力强,一般用于工业设备直接通信电平转换芯

weixin_43772611的博客 6860

YOLO11模型热更新:不停机替换实战

本文介绍了如何在星图GPU平台上自动化部署YOLO11镜像,实现目标检测服务的不停机模型热更新。通过预置的YOLO11镜像,用户可在实时视频流处理场景中动态替换模型权重,保障业务连续性,适用于智能安防、工业质检等低延迟AI视觉应用。

weixin_29025501的博客 379

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【Mojo+Python企业级混合编程实战指南】:20年架构师亲授3大高频场景落地方法论

解决AI工程化性能瓶颈,详解Mojo与Python混合编程案例企业级应用场景。覆盖高频场景:模型推理加速、实时数据管道优化、异构系统集成;提供FFI调用、内存共享、渐进式迁移三大方法论;兼顾Python生态与Mojo极致性能。值得收藏

AlgoChat的博客 377

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

【仅开放72小时】边缘Python热更新失败率下降91.6%的动态模块加载框架(含完整源码+Yocto层适配补丁)

解决边缘Python热更新失败难题,提供轻量动态模块加载框架。适用于Yocto嵌入式系统,支持运行时热替换、零停机部署,失败率下降91.6%。含边缘Python部署教程、完整源码及Yocto层适配补丁,值得收藏。

FastSolve的博客 237

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

[特殊字符] ROS 2 参数服务(Parameter Service)从零到一实战指南:附避坑实录

我们在包内创建一个 Python 文件,它拥有一个名为 my_param 的字符串参数,默认值为 "Hello World",并且每隔 2 秒打印一次当前的值。摘要: 通过一个 5 步走的实战案例,从环境报错排查到原生 Python 节点编写,带你彻底掌握 ROS 2 参数服务动态配置的核心机制。至此,你不仅通过命令行体验了参数服务的威力,还编写了属于自己的参数节点,并成功实现了动态修改参数的闭环。本文将带你从零开始,配置好环境,并亲手编写一个支持动态参数修改的 ROS 2 Python 节点。

2501_92087046的博客 321

Python 中的模块热加载(Hot Reload)

热加载是指在程序运行时动态替换和重新加载模块或代码,而不需要重新启动整个应用程序。这种技术可用于在不间断运行的情况下更新代码、应用变更和改进,提高开发效率,加快调试过程。

旦莫的博客 4140

为什么92%的Python异步服务仍在被GIL拖慢?揭秘2024最新无锁插件链:下载→验证→热加载全流程

破解Python异步服务受GIL拖慢困局,提供无锁GIL环境下的并发模型插件下载与安装全链路方案。支持HTTP/HTTPS安全下载、SHA256自动验证、零停机热加载,适用于高并发API网关与实时数据管道。显著提升CPU密集型任务吞吐量,值得收藏。

CompiLume的博客 422

python热加载_tornado热加载框架

收藏的一个tornado热加载框架# coding:utf-8#mvc框架总入口import sysimport osimport timeimport reimport tornado.genimport tornado.webimport tracebackimport mvcrootimport mvcroot.confimport ujson as jsonif(sys.version[0...

weixin_42361112的博客 527

客户端python热更新

介绍: 热更新,就是在维持服务不间断的情况下,对软件代码逻辑或配置数据进行更新修复。随着游戏项目引入了脚本语言以后,热更新技术逐渐成为了标配,在我经历过的游戏项目中,无论是服务端还是客户端,版本的更新迭代都是围绕着静态patch和动态patch(热更新)来进行的。下面来谈一下客户端python热更新的处理。 原理:     1. 标准import 我们知道,impo

Ad_Chang的Blog 6993

【Python】PyCharm热加载,调试时,修改运行时代码无需重新启动程序即可更新所做的修改

背景描述 简言之: 程序出现错误,修改错误代码后必须要重新执行整个程序 详细说明: 在调试python程序时经常会出现这样的情况,代码执行到某一处时出现错误,或者与预期的的结果不一致,这时候发现是某一行写错了,我们会先对这一行进行简单修改并验证,然后再重新启动程序重头执行,再看看还有没有其它错误,然而如果在这一行之前执行了大量的费时操作,我们必须一直等到运行到修改处再看后面的代码是否还有误,浪费了大量的时间来重复执行前面已经能够保证正确的代码 而python作为一个解释性语言,相比于编译型语言,必然更容

qq_39165617的博客 1万+
上一篇: Ubuntu 16.04 RabbitMq 安装与运行
下一篇: TCP的三次握手与四次挥手理解
zhang_shuaixiang
博客等级 码龄13年 58粉丝 66原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值