python isinstance函数用法详解_python

来源:脚本之家  责任编辑:小易  

启动一个新的instance涉及到很多openstack nova里面的组件API server:处理客户端的请求,并且转发到cloud controlCloud control:处理compute节点,网络控制节点,API server和scheduler中间连接Scheduler:选择一个host去执行命令compute worker:启动和停止实例,附加和删除卷 等操作network controller:管理网络资源,分配固定IP,配置vlansOpenstack创建instance的流程1.API server将消息发送到Cloud Controller2.Authertication 保用户有权限,然后Cloud Controller将消息发送给Scheduler3.Scheduler caste 一个消息给一个选择好的host要求他启动一个实例4.compute worker(选择的那个host)获取到消息5.6.7.8 compute worker需要一个固定的ip去启动一个实例,所以向network controller发送消息下面我将详细说明一下:API1.可以在dashboard网页上面进行2.可以用命令行 euca-add-keypair euca-run-instances用户的请求发送到nova-api,有两种方式第一种:通过openstack api(nova/api/servers.py 类 class Controller(object))create方法def create(self,req,body):“””Creates a new server for a given user“””if‘server’in body:body[‘server’][‘key_name’]=self._get_key_name(req,body)extra_values=Noneextra_values,instances=self.helper.create_instancereq,body,self.compute_api.create)第二种:通过ec2 api(nova/api/cloud.py 中类 CloudController)调用def run_instances(self,context,*kwargs):(instances,resv_id)=self.compute_api.create(context,instance_type=instance_types.get_instance_type_by_namekwargs.get(‘instance_type’,None)),最终调用的Compute API create():查看这种类型的instance是否达到最大值如果不存在安全组,就创建个生成MAC地址和hostnames给scheduler发送一个消息去运行这个实例CAST当然maxCount为1(默认值为1)的时候 调用RPC.cast方法向scheduler发送运行实例的消息Openstack创建instance的流程在openstack中通过RPC.cast来发送消息,消息的分发通过RabbitMQ。消息发送方(Compute API)往topic exchange(scheduler topic)发送一个消息,消息消费者(Scheduler worker)从队列中获得消息,cast调用不需要返回值。[python]view plaincopydef_schedule_run_instance(self,return rpc_method(context,FLAGS.scheduler_topic,{“method”:“run_instance”,“args”:{“topic”:FLAGS.compute_topic,“request_spec”:request_spec,“admin_password”:admin_password,“injected_files”:injected_files,“requested_networks”:requested_networks,“is_first_time”:True,“filter_properties”:filter_properties}})Schedulerscheduler接收到消息,然后通过设定的scheduler策略选择一个目的host,如:zone scheduler选择一个主机在特定的可获取的zone上面。最后发送一个cast消息到特定的host上面[python]view plaincopydef cast_to_compute_host(context,host,method,update_db=True,*kwargs):“””Cast request to a compute host queue”””if update_db:fall back on the id if the uuid is not presentinstance_id=kwargs.get(‘instance_id’,None)instance_uuid=kwargs.get(‘instance_uuid’,instance_id)if instance_uuid is not None:now=utils.utcnow()db.instance_update(context,instance_uuid,{‘host’:host,‘scheduled_at’:now})rpc.cast(context,db.queue_get_for(context,‘compute’,host),{“method”:method,“args”:kwargs})LOG.debug(_(“Casted‘%(method)s’to compute‘%(host)s’”)%locals())Computecompute worker进程接收到消息执行方法(nova/compute/manager.py)[python]view plaincopydef_run_instance(self,context,instance_uuid,requested_networks=None,injected_files=[],admin_password=None,is_first_time=False,kwargs):“””Launch a new instance with specified options.”””context=context.elevated()try:instance=self.db.instance_get_by_uuid(context,instance_uuid)self._check_instance_not_already_created(context,instance)image_meta=self._check_image_size(context,instance)self._start_building(context,instance)self._notify_about_instance_usage(instance,“create.start”)network_info=self._allocate_network(context,instance,requested_networks)try:block_device_info=self._prep_block_device(context,instance)instance=self._spawn(context,instance,image_meta,network_info,block_device_info,injected_files,admin_password)检查instance是否已经在运行分配一个固定的ip地址如果没有设置vlan和网桥,设置一下最后通过虚拟化的driver spawn一个instancenetwork controllernetwork_info=self._allocate_network(context,instance,requested_networks)调用network的API的allocate_for_instance方法[python]view plaincopydef allocate_for_instance(self,context,instance,*kwargs):“””Allocates all network structures for an instance.returns:network info as from get_instance_nw_info()below“””args=kwargsargs[‘instance_id’]=instance[‘id’]args[‘instance_uuid’]=instance[‘uuid’]args[‘project_id’]=instance[‘project_id’]args[‘host’]=instance[‘host’]args[‘rxtx_factor’]=instance[‘instance_type’][‘rxtx_factor’]nw_info=rpc.call(context,FLAGS.network_topic,{‘method’:‘allocate_for_instance’,‘args’:args})RPC.call 与RPC.cast最大的不同 就是call方法需要一个responseOpenstack创建instance的流程Spawn instance接下来我要说的就是虚拟化的driver spawn instance,我们这里使用的是libvirt(nova/virt/libvirt/lconnection.py)[python]view plaincopydef spawn(self,context,instance,image_meta,network_info,block_device_info=None):xml=self.to_xml(instance,network_info,image_meta,False,block_device_info=block_device_info)self.firewall_driver.setup_basic_filtering(instance,network_info)self.firewall_driver.prepare_instance_filter(instance,network_info)self._create_image(context,instance,xml,network_info=network_info,block_device_info=block_device_info)self._create_new_domain(xml)LOG.debug(_(“Instance is running”),instance=instance)self._enable_hairpin(instance)self.firewall_driver.apply_instance_filter(instance,network_info)def_wait_for_boot():“””Called at an interval until the VM is running.”””try:state=self.get_info(instance)[‘state’]except exception.NotFound:LOG.error(_(“During reboot,instance disappeared.”),instance=instance)raise utils.LoopingCallDoneif state=power_state.RUNNING:LOG.info(_(“Instance spawned successfully.”),instance=instance)raise utils.LoopingCallDonetimer=utils.LoopingCall(_wait_for_boot)return timer.start(interval=0.5,now=True)通过libvirt xml文件,然后根据xml文件生成instance准备network filter,默认的fierwall driver是iptablesimage的创建(详细情况以后再介绍)def_create_image(self,context,instance,libvirt_xml,suffix=”,disk_images=None,network_info=None,block_device_info=None):最后虚拟化driver的spawn()方法中调用driver 的creatXML()www.zgxue.com防采集请勿采集本网。

这篇文章主要介绍了python isinstance函数用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

isinstance() 函数来判断一个对象是否是一个已知的类型类似 type()。

isinstance() 与 type() 区别:

type() 不会认为子类是一种父类类型,不考虑继承关系。

isinstance() 会认为子类是一种父类类型,考虑继承关系。

如果要判断两个类型是否相同推荐使用 isinstance()。

语法

isinstance(object, classinfo)

参数

object -- 实例对象。

classinfo -- 可以是直接或间接类名、基本类型或者由它们组成的元组。

>>>a = 2>>> isinstance (a,int) True>>> isinstance (a,str) False>>> isinstance (a,(str,int,list)) # 是元组中的一个返回 True True

对于基本类型来说 classinfo 可以是:

int,float,bool,complex,str(字符串),list,dict(字典),set,tuple

要注意的是,classinfo 的字符串是 str 而不是 string,字典也是简写 dict。

实例

arg=123isinstance(arg, int) #输出Trueisinstance(arg, str) #输出Falseisinstance(arg, string) #报错

用于判断是否是一个类的继承关系

class A: pass class B(A): pass isinstance(A(), A) # returns Truetype(A()) == A # returns Trueisinstance(B(), A) # returns Truetype(B()) == A # returns False

可以在接受参数的时候 来校验参数类型

isinstance 的用法:语法:isinstance(object,classinfo)其中,object 是变量,classinfo 是类型即(tuple,dict,int,float,list,bool等)和 class类若参数 object 是 classinfo 类的实例,或者 object 是 classinfo 类的子类的一个实例,True。若 object 不是一个给定类型的的对象,则返回结果总是False。若 classinfo 不是一种数据类型或者由数据类型构成的元组,将引发一个 TypeError 异常。例如:isinstance(3,int)Trueisinstance(3.5,float)Trueisinstance(123,str)Falseisinstance('adf',(str,float,int))Trueclass myClass:passtest=myClass()isinstance(test,myClass)True12345678910111213141516171234567891011121314151617type()与isinstance()的区别:共同点:两者都可以判断对象类型不同点:对于一个 class 类的子类对象类型判断,type就不行了,而 isinstance 可以。例如:class A:passclass B(A):passisinstance(A(),A)#returns Truetype(A())=A#returns Trueisinstance(B(),A)#returns Truetype(B())=A#returns False1234567891012345678910综上,推荐使用 isinstance 判断对象类型内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • 对python中assert、isinstance的用法详解
  • python issubclass 和 isinstance函数
  • 深入浅析python获取对象信息的函数type()、isinstance()、dir()
  • 浅谈python中重载isinstance继承关系的问题
  • python数据类型判断type与isinstance的区别实例解析
  • python isinstance函数介绍
  • python中请使用isinstance()判断变量类型
  • python isinstance判断对象类型
  • django实现登录时候输入密码错误5次锁定用户十分钟
  • python实现将照片变成卡通图片的方法【基于opencv】
  • django多种支付、并发订单处理实例代码
  • python 通过类中一个方法获取另一个方法变量的实例
  • python实现返回数组中第i小元素的方法示例
  • python 监测文件是否更新的方法
  • 使用python保存网页上的图片或者保存页面为截图
  • python后台管理员管理前台会员信息的讲解
  • tensorflow实现自定义op方式
  • pip 错误unused-command-line-argument-hard-error-in-future解决
  • python 3 isinstance函数的用法,下面的代码如何解释?
  • 如何在openstack启动instan
  • equals重写时instanceof与getclass有什么区别
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全vbsdos/bathtahtcpythonperl游戏相关vba远程脚本coldfusionruby专题autoitseraphzonepowershelllinux shellluagolangerlang其它首页python对python中assert、isinstance的用法详解python issubclass 和 isinstance函数深入浅析python获取对象信息的函数type()、isinstance()、dir()浅谈python中重载isinstance继承关系的问题python数据类型判断type与isinstance的区别实例解析python isinstance函数介绍python中请使用isinstance()判断变量类型python isinstance判断对象类型django实现登录时候输入密码错误5次锁定用户十分钟python实现将照片变成卡通图片的方法【基于opencv】django多种支付、并发订单处理实例代码python 通过类中一个方法获取另一个方法变量的实例python实现返回数组中第i小元素的方法示例python 监测文件是否更新的方法使用python保存网页上的图片或者保存页面为截图python后台管理员管理前台会员信息的讲解tensorflow实现自定义op方式pip 错误unused-command-line-argument-hard-error-in-future解决python入门教程 超详细1小时学会python 列表(list)操作方法详解python 元组(tuple)操作详解python 字典(dictionary)操作详解pycharm 使用心得(一)安装和首python strip()函数 介绍python 中文乱码问题深入分析python科学计算环境推荐——anacpython逐行读取文件内容的三种方python中使用xlrd、xlwt操作excepython pyqt5 pycharm 环境搭建及配置详解python3实现tcp协议的简单服务器和客户端django 开发调试工具 django-debug-toolbpython初学之用户登录的实现过程(实例讲解django admin中增加导出csv功能过程解析python常用知识梳理(必看篇)使用python制作新型冠状病毒实时疫情图详解python中heapq模块的用法对python中if语句的真假判断实例详解使用python itchat包爬取微信好友头像形成
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved