博文

目前显示的是 十一月, 2022的博文

Python海象运算符

 Python海象运算符号实在 PEP 572 中提出来的,并且在Python3.8版本引入。 英文名称是Assignment Expresions,即赋值表达式, 符号是  :=   我们称之为海象运算符(walrus operator)。 语法格式如下: variable_name := expression  或者 variable_name := value 就是变量名后跟一个表达式或者值,可以看成Python的新的赋值表达式(=也是Python的赋值表达式)。 用法: if else语句中 常规写法 a=15 if a>10:     print("hello world") 海象运算符写法: if a:=15>10:      print("hello world") while语句中: 常规写法: n=6 while n:      print("hello world")     n -=1 海象运算符写法: n=6 while (n:=n-1)+1:  #需要加1是因为在执行输出前n就减1了      print("hello world") 读取文件中 常规写法: fp=open("test.txt","r") while True:     line=fp.readline()     if not line: break     print(line.strip()) fp.close() 海象运算符写法: fp=open("test.txt","r") while line:=fp.readline():      print(line.strip()) 用于列表推导: nums = [16, 36, 49, 64] def f(x):     print('运行了函数f(x)1次。')     return x ** 0.5 print([f(i) for i in nums if f(i) > 5]) 一共...

搜索引擎和Lucene基础(第54天)

图片
 搜索引擎组件及其组件之间的关系: 搜索引擎如何搜索图片,或者pdf文件等二进制对象? 文档是由key-value组成的,key也叫做域。 文档分析本质就是切词。 Lucene 著名的搜索引擎中关于索引链的实现方案是Lucene Lucene可以把原始数据构建成文档,并作文档分析,创建出索引。 Lucene前端的著名实现有Elastic Search Lucene中的文档(document) 文档是包含了一个或多个域的容器。域在Lucene中称为field(field:value就是键值对)。 在搜索的时候,其实搜索的对象是value 域: 域有很多选项,包括索引选项、存储选项、域向量使用选项; 索引选项用于通过倒排索引来控制文本是否可被搜索:索引选项可取值有: Index:ANYLYZED:分析(切词)并单独作为索引项; ndex.Not_ANYLYZED:不分析(不切词),把整个内容当一个索引项; Index.ANYLYZED_NORMS:类似于Index:ANALYZED,但不存储token的Norms(加权基准)信息; Index.Not_ANYLYZED_NORMS:类似于Index:Not_ANALYZED,但不存储值的Norms(加权基准)信息; Index.NO: 不对此域的值进行索引;因此不能被搜索; 存储选项:是否需要存储域的真实值; title:This is a Notebook. store.YES:存储真实值 store.NO:不存储真实值 域向量选项用于在搜索期间该文档所有的唯一项都能完全从文档中检索时使用; 文档和域的加权操作:加权计算标准 搜索: 查询Lucene索引时,它返回的是一个有序的scoreDoc对象;查询时,Lucene会为每个文档计算出其score(评分,评分是根据加权计算来的); Lucene  提供的API有: IndexSearcher:搜索索引入口; Query及其子类: QueryParser:查询分析器 TopDocs :前几个 scoreDoc对象 ScoreDoc: Lucene的多样化查询: IndexSearcher类中的search方法;将输入的关键词封装成query对象,传递给search方法,具体的搜索方式有:TermQuery, TermRangeQuery,Nu...

libvrit管理kvm虚拟机和虚拟化网络(第52天)

 libvirt工具栈: libvirt支持管理的的虚拟化技术:KVM, XEN, VMWARE, Qemu,LXC, OpenVZ;  libvirt是一套用于管理硬件虚拟化的开源API、守护进程与管理工具。[3]此套组可用于管理KVM、Xen、VMware ESXi、QEMU及其他虚拟化技术。libvirt内置的API广泛用于云解决方案开发中的虚拟机监视器编排层(Orchestration Layer)。 支持管理本地和远程主机上的虚拟机。 所有被管理的Hypervisor都必须安装libvirtd服务 libvirt中的术语: node: 指物理节点 domain: vm instances(虚拟机实例),所以在libvirt中,域就是虚拟机实例 Hypervisor 安装: virt-manager(图形化管理工具)virt-install (cli程序)和libvirt-client(提供virsh,用于管理虚拟机) # yum install libvirt libvirt-client virt-install virt-manager 安装完后:查看 rpm -ql libvirt-daemon   (libvirt-daemon是主程序) libvirt和libvirtd的配置文件: libvirt配置文件:/etc/libvirt/libvirt.conf 守护进程libvirtd配置文件:/etc/libvirt/libvirtd.conf systemctl start libvirtd.service   启动服务 客户端工具: 服务启动之后可以使用客户端工具查看或管理虚拟机: 此处安装的客户端工具有(virt-manager和virsh和virt-install): virt-manager &    图形界面 virsh list (virsh是受欢迎的虚拟机管理工具) virsh --help  查看virsh帮助信息 virt-install的使用方法: virt-install 类似于qemu-kvm 使用virt-install创建虚拟机并安装GuestOS: virt-install是一个命令行工具,它能够为KVM、Xen...

KVM(第51天)

图片
 KVM:Kernel-based Virtual Machine 基于内核的虚拟机,依赖于HVM(比如intel VT-x, amd ADM-V),KVM寄宿于内核中。所以,把加载KVM模块的内核称之为Hypervisor,由此可知该Hypervisor直接运行于硬件平台之上,内核之上的用户空间还是原来的用户空间。创建出来的虚拟机运行于Hypervisor之上,有自己的内核和用户空间 KVM加载后的系统的运行模式: 内核模式:执行GuestOS的IO类操作,或者其他的特殊指令的操作,称为来宾的内核模式 来宾模式:执行GuestOS的非IO类操作,称为来宾的用户模式 用户模式:代表GuestOS请求IO类操作 KVM Hypervisor:加载KVM模块的内核 KVM的组件: /dev/kvm:工作于Hypervisor,在用户空间可通过ioctl()系统调用来完成VM创建,启动管理功能,他是一个字符设备,功能包括为VM分配内存,读写VCPU的寄存器,向VCPU注入中断,运行VCPU等等 qemu进程:工作于用户空间,kvm需要借助qemu模拟IO设备 KVM的特性: 内存管理:      支持将分配给VM的内存交换至SWAP      支持使用Huge Page      支持使用INTEL EPT和AMD RVI技术完成内存地址的映射:Guest虚拟地址到guest物理地址到宿主机物理地址     支持KSM(Kernel Same-page Merging) KVM继承了Linux系统管理内存的诸多特性,比如,分配给虚拟使用的内存可以被交换至交换空间、能够使用大内存页以实现更好的性能,以及对NUMA的支持能够让虚拟机高效访问更大的内存空间等。 KVM基于Intel的EPT(Extended Page Table)或AMD的RVI(Rapid Virtualization Indexing)技术可以支持更新的内存虚拟功能,这可以降低CPU的占用率,并提供较好的吞吐量。 此外,KVM还借助于KSM(Kernel Same-page Merging)这个内核特性实现了内存页面共享。KSM通过扫描每个虚拟机的内存查找各虚拟机间相同的内存页,并将这些内存...

Xen(第50天)

 Xen Xen属于type-I虚拟化类别,Xen hypervisor直接运行于硬件平台上,运行于Xen hypervisor之上的操作系统都属于guest . 但是Xen仅仅虚拟化了CPU和内存,IO设备并没有虚拟化,Xen hypervisor上第一个guest有管理其他guest的权限和操作接口,第一个guest的内核管理硬件上的IO设备,支持网络设备和块设备,对于这些IO设备的访问支持半虚拟化,设备被抽象成net-frond,net-backend, block-frond, block-backend,其中前端存在于各guest中。 第二个,第三个等等的guest需要使用CPU和内存时向Xen hypervsior申请,需要使用IO设备时向第一个guest申请,该guest必须借助于qemu模拟出IO设备 第一个guest被称为Domain0(Privilleged Domain ),其他的成为DomainU(Unprivilleged Domain) ,有各自的ID。 Dom0提供管理其他DomU的工具栈,用于实现对虚拟机进行添加,启动,快照,停止,删除等操作。 DomU属于非特权域,支持PV(半虚拟化),HVM(硬件辅助虚拟化)和PV on HVM 3种虚拟技术。 Xen的PV技术:不依赖于CPU的hvm特性,但是要求GuestOS的内核做出修改以知晓自己运行于PV环境,运行于DomU中的OS有linux(2.6.24+),NetBSD,FreeBSD, OpenSolaris Xen的HVM技术,依赖于Intel VT或AMD-V,还要依赖于Qemu来模拟IO设备,运行于DomU中的OS有,几乎所有支持此X86平台的操作系统 PV on HVM:CPU为HVM模式运行,IO设备为PV模式运行,运行于DomU的OS有,只要OS能驱动PV接口类型的IO设备,net-front, block-front Xen的工具栈: xm/xend:在Xen Hypervisor的Dom0中要启动xend服务 xm:是命令行工具,有诸多子命令,比如creat, destroy,stop,pause xl:基于libxenlight提供的轻量级的命令行工具栈 xe/xapi:提供了对xen管理的api,因此用于cloud环境:比如Xen Server, XCP...