OpenStack 应用实战与开发入门-春季班

(0评价)
价格: 690.00元

opentstack安装

     硬件要求 
       ◦ CPU: dual core 2.6GHZ+ 
       ◦ Memory: 4G+ 
       ◦ Disk: 40G+ 
     BIOS 虚拟化支持 VT

 

Virtual box 下载与安装 
◦ 官方下载最新版 
◦ 需要重启网络 
 Fuel master 镜像 
◦ 官方下载iso镜像 
 包含OpenStack 所以包 
 包含Centos 安装包 
 目前最新5.0(icehouse)

FUEL:生产环境

Openstack 自动化部署工具 
◦ 生产环境部署 
 基于web 的界面 
 免费并开源,功能丰富 
◦ OS安装 
◦ Openstack 服务康检查 
◦ 配置管理(puppet  e.g.)

 

3个虚拟机:

1. 3个虚拟网络

    net1:  fuel administrator 管理

    net2:  openstack的 public 物理网卡

    net3: storage 网络

 

 

 

 

 

[展开全文]

在Python过程是特殊的函数,返回None

函数可以返回多个值

 def p():

   return 1,2,3

a,b,c=p()

print a,b,c

函数有文档熟悉__doc__

函数参数

  1.位置参数 

  2.关键字参数

  3.[默认参数],必须定义在位置参数的最后

  4.非关键字可变长度参数(*元祖)

  5.关键字变量参数(**字典),必须出现在这个函数调用的最后

[展开全文]

列表(list) 

[]

元祖(tupie)

()

字符串也适用

[展开全文]

为什么要学习python?

简单的语法

丰富的库

python之父。Guido Von Rossum

python在1989年,从ABC语言发展而来

目前比较流行的python版本是2.7

GC garbage collection内存管理

python特点:

免费,开源

动态数据类型,高层语言

可移植性

面向对象

可扩展性

 

python解释器

Cpython标准解释器

Jython 可调用java库

IronPython,能调用.net的函数库

 

Python web开发框架

Django最流行和成熟的web开发框架

 

云计算

openstack,完全用python实现的开源的iaas解决方案

dropbox云存储的创业公司

instagram 使用Django作为backend

 

Python社区

华蟒用户组,重要的python中文社区http://python.cn/

啄木鸟社区 http://wiki.woodpecker.org.cn

豆瓣Python小组,http://www.douban.com/group/python/

 

 

 

[展开全文]

函数有返回值

过程是没有返回值的函数,python解释器会隐式的返回none

 

 

 

[展开全文]

切片,字符串以及序列的拷贝

序列的数据结构:

.列表

.元组

.字符串

 

元素的访问方式

 

连接操作

。[list|string]+[list|string]

。[list].extend([list]),只有列表支持extend操作,原地修改

。[list|string]*[integer],复制N份

 

切片slice

->当步进为负数

 

类型转换

.可以通过list(),tuple()的工厂函数来转换

.实际上并不是转换,而是创建了一个新的序列对象

 

序列的内建函数

enumerate

len

reversed

sorted

sum

 

字符串

.字符串是不可变序列,任何一点修改都会创建一个新的字符串对象

.三种定义方法,单引号,双引号和三引号

.普通字符串(str)和Unicode字符串(Unicode)

.字符串支持切片获取子字符串和用下标获取字符

 

字符串连接

.+号

.join

 

unicode字符串

.通过在字符串前加一个'u'前缀来创建一个unicode的字符串

.普通的字符串采用的是ASCII的编码

.对于中午的处理,需要采用unicode的编码

 

编码

.encode,编码

.decode,解码

 

元组真的不能修改?

。对于容器中存储容器元素的方式,Python实际存储的是Reference(内存地址)

 

拷贝

。浅拷贝,normal copy(序列中存在容器时,拷贝的容器引用指向同一对象)

->list,tuple工厂函数

->切片

->copy模块的copy函数

。深拷贝,deep copy(完整的拷贝)

[展开全文]

Python提供了两个内置函数从标准输入读入一行文本,默认的标准输入是键盘。如下:

  • raw_input
  • input

raw_input函数

raw_input() 函数从标准输入读取一个行,并返回一个字符串(去掉结尾的换行符):

str = raw_input("Enter your input: ");
print "Received input is : ", str

这将提示你输入任意字符串,然后在屏幕上显示相同的字符串。当我输入"Hello Python!",它的输出如下:

Enter your input: Hello Python
Received input is :  Hello Python

input函数

input() 函数和raw_input() 函数基本可以互换,但是input会假设你的输入是一个有效的Python表达式,并返回运算结果。这应该是两者的最大区别。

str = input("Enter your input: ");
print "Received input is : ", str

这会产生如下的对应着输入的结果:

Enter your input: [x*5 for x in range(2,10,2)]
Recieved input is :  [10, 20, 30, 40]

翻转字符串

代码如下:
#strrev(sStr1)
sStr1 = 'abcdefg'
sStr1 = sStr1[::-1]
print sStr1

 

[展开全文]

列表不能被hash

元祖可以被hash

包含列表的元祖不可以被hash

a={'a':1,'b':2}

a=dict(a=2,b=2)

默认值

a.get('a','Default')

a.keys()

集合

set、frozenset

add(),remove(),update(序列)

高级操作

unoin (|)

intersection(&)

difference(-)

symmetric_difference(^)

 

 

[展开全文]

浅拷贝 :list包含容器类型的元素,浅拷贝之后,两个list的容器类型元素指向同一个容器类型

深拷贝

import copy

copy.deepcopy(a)

[展开全文]

python工作中常用模块

    首先找内置模块:

         模块文档API

          使用场景

                操作系统相关

                文件路径处理

                      os.path

                 网络处理

                 数据处理

[展开全文]

打包工具:

setuptools

 

 

[展开全文]

yum install  guestfish

guestfish --rw -a 镜像

run

 

[展开全文]

virt-install --name image-test --hvm  --ram 2048  --vcpus 2  --disk path=/var/tmp/image-test.img,size=10,bus=virtio,format=qcow2 --network network:default --accelerate --vnc --vncport=5908  --cdrom /var/tmp/CentOS-6.5-x86_64-bin-DVD1.iso  --boot cdrom

 

vi /etc/sysconfig/network-scripts/ifcfg-eth0

修改boot为yes 删除不必要的hardxxx

连接虚拟机

ssh root@192.168.100.134

镜像被重新加载instance时候 这个文件会重新生成

rm /etc/udev/rules.d/70-persistent-net.rules

禁用防火墙

vi /etc/sysconfig/iptables

删掉其中的所有记录,清除规则

 

service iptables restart重启防火墙

 

更新rpm包
yum install -y http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

安装一个包 针对于云的运行环境需要用到的特殊功能,需要定制化的script 这个包全部打包了这些

yum install  -y cloud-init

针对云的环境 需要特殊的功能

默认用户名字叫cloud-user  改成了centos


image-test.img虚拟机shutdown以后能启动,网卡信会被修改

格式转换 将vhd转换成raw

qemu-img convert -f vpc -o raw vhd-test.vhd vhd-test.vhd.raw

想转成其他格式 都需要先转换成raw格式,然后才能转换成其他格式

详细请看image-guide.pdf

 

 

 

[展开全文]

fabric

 

Python的进程(具体操作系统的子进程的support)

Linux->fork

Windows->native api

 

 

package including:

->普通的folder

->Python module

->__init__.py

 

经典类->新式类

 

整理需求->设计DB schema->选择framework->更好的前端实现......

 

vi的plugin机制(vundle)

[展开全文]

PypiServer

setuptools->http://peak.telecommunity.com/DevCenter/setuptools#including-data-files

为什么要用打包工具?

应用怎么支持plugin(entry_points...)

 

site-packages

 

写模块的人要考虑兼容性

 

Python Runtime 的source code

 

python优化->预编译(pyc)

 

Python的可见性管理

->双下划线开头的只能内部调用

->两边都是双下划线->Python预定义的API

 

django的alter table问题(先定义DB的schema,再定义controller)

django的生态?->web开发框架的选型问题?

 

learning curve:

web.py->django(documentation)

 

Python web开发环境搭建相关问题

[展开全文]

线程与进程

。线程->成为轻量级进程(lightweight Process, LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位

。进程->进程是一个具有独立功能的程序关于某个数据集合的一次运行活动。它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体。它不只是程序的代码,还包括当前的活动,通过程序计数器的值和处理寄存器的内容来表示

。进程和线程的关系->可以理解为线程是一种进程,其实每一个进程内部都有一个主线程(可以理解成主线程就是进程)。多线程的情况下,进程内可以创建多个线程,但代表这个进程的主线程必须存在。

 

线程

。Green Thread ,解释器级别的线程,也被称为User Thread

。OSThread,操作系统级别的线程,CPython采用OS level的Thread实现

 

线程调度

。对于User Level Thread,由解释器负责调度,操作系统不知道线程的存在

。对于OS Level Thread,由OS负责调度,但是需要上下文切换(context switch,(User space->kernel space))

 

多线程与多核

。Python的多线程由于GIL(Global Interpreter Lock)的存在而无法充分利用多核来提高效率

。每个Thread Task必须获取解释器的GIL的锁才能获得运行

 

多线程的使用场景

。Python的多线程对于CPU密集型的计算而言,由于GIL的存在不能提高性能

。对于IO密集型的应用,通过使用多线程的方式可以提高CPU的使用效率,在IO等待的过程中释放CPU的计算资源

 

线程内存模型

。多线程之间共享进程的内存地址空间

。线程有自己的stack

 

线程的并发

。state share,通过进程的内存空间来共享

。多线程访问的竞争(race condition),通过Lock,Condition等synchronization的机制来保证并发访问,避免冲突

 

Python的多线程实现

。thread模块,low-level的多线程支持

。threading模块,high-level的线程支持,提供了Lock,RLock,Condition,等synchronization机制的实现

 

创建线程

。使用thread模块的start_new_thread方法来创建

。继承threading模块的Thread类,实现run的方法,类似Java的线程实现

 

线程对象的方法

。join(),挂起当前的线程,直到被调用线程退出

。start(),启动线程,执行run定义的方法

。isAlive(),返回线程是不是还活着(master管理线程通过查询来对线程进行操作)

 

锁对象

。threading.Lock

。当线程通过lock。acquire()的方法获取锁以后,其他任何线程调用同一个lock对象的acquire的方法都会无法再获取锁

。lock.release(),释放当前线程所获取的锁

。try...finally来保证lock的操作的完整性

dead lock

 

多进程

。Python的多进程=多个Python解释器,不受到GIL的限制,可以充分利用多核

。每个进程有独立的内存地址空间,互相完全独立

。操作系统负责Schedule

 

Python多进程

。Python的mutilprocessing模块负责进程的处理

 

创建进程

。类似于创建Thread对象,通过继承multiprocessing.Process类,重写run的方法

 

进程对象的方法

。start(),启动一个进程并执行run方法

。join(),挂起当前进程,知道被调用join的子进程对象terminate

 

进程的锁

。防止多进程之间访问同一个资源,通过锁来隔离

。类似于多线程的锁的使用

 

进程间的通信

。进程的内存空间相互独立

。通过multiprocessing.Queue,使用消息的方式来实现多个进程之间的通信(可以通过多个Queue传递不同的数据,也可以通过同一个)

 

什么是协程[corotine]?

。协程是一种更加轻量的线程

。协程的调度在User Space中来实现,因此不需要Context Switch,自然性能要比使用Thread更高

。并发处理更加简单,因为协程的调度由程序自己控制,不需要依赖OS的schedule

 

协程的优点

。更高的并发量

。多个状态间的切换和流转

 

协程的实现

。yield生成器的实现

。greenlet

[展开全文]

发布模块

 

如何安装一个模块

。从源码安装

。模块管理工具来安装 pip,easy_install

模块管理的优点

.版本控制

.依赖处理

 

模块管理工具

.easy_install

.pip

 

安装pip

.Mac自带pip

.Windows需要下载对应的安装包

.Linux使用各自的包管理器进行安装

.使用 easy_install install pip,让模块管理器来安装模块管理器

 

模块管理

.pip install [模块名]

.pip uninstall [模块名] #卸的时候不卸载依赖

.pip freeze 显示所有已经安装的模块

 

pip install tox --index-url http://pypi.douban.com/simple

pip install -r requirements.txt

 

中央仓库

https://pypi.python.org/pypi

本地中央库

 

virtualenv

。沙盒

。相同模块的不同版本(两个不同的程序对模块的版本要求可能不一样

。每个应用程序有一套自己的Python的运行环境

 

安装virtualenv

。pip install virtualenv

 

virtualenv使用

。activate使用虚拟Python环境

。deactivate退出使用

 

 

发布模块到Pypi

。需要一个Pypi的账号

。在项目根目录中添加一个setup.py的模块描述文件

 

setuptools模块

。setup是必须要在setup.py中调用的方法,用来描述整个打包的相关信息

。提供一系列API例如find_packages等用来帮助我们更好地编写setup方法

 

setup函数

。模块的基本信息

。模块的版本信息

。模块的所需要的第三方依赖

。模块的介绍文档

 

setup.py常用命令

。python setup.py clean 清空环境

。python setup.py register 注册模块信息到pypi中

。python setup.py sdist upload 打包并上传模块

 

~/.pypirc

。维护Pypi服务的账号信息

[展开全文]

面向对象是一种对现实世界理解和抽象(vs.面向过程)

面向对象编程

。抽象/实现

。封装/接口

。合成

。派生/继承

。多态

。自省/反射

 

类型与类

。类型Type,Python2.2开始统一了类和类型,(新式类,必须有一个父类)

。类Class,类本身也是一个对象,(经典类)

 

类与实例

。实例是真正的对象,它存放了类中定义的对象的具体信息

 

实例方法

。方法定义在类中,但是只能被实例所调用

。第一个位置参数为self,这个self表示的是实例对象的本身

。调用实例函数的时候不需要显示地传入self参数

 

__init__(self,)

.__init__的方法是Python的构造函数,但是它实际上不是一个真正的 构造函数,Python使用__new__来构造对象,使用__init__来初始化对象

.当使用A()来构建实例对象的时候,会调用__init__来实现初始化

 

实例变量和类变量

。类变量绑定在类上

。实例变量绑定在实例对象上,通常使用self.x来表示实例变量

 

类方法和静态方法

。类方法的第一个位置参数不是self,而是cls,表示绑定到类上

。使用@staticmethod来装饰一个静态方法,静态方法不需要self和cls

。使用@classmethod来装饰一个类函数

 

子类

。Python支持多继承

。子类弱没有自己定义__init__方法,会默认调用基类的__init__方法,如果子类定义了__init__方法,则需要显示调用基类的__init__方法,并且传入self参数

 

类属性

。文档属性,第一行没有赋值的字符串

。类的数据属性

。通过内建函数dir()来访问类的属性(包括父类)

。类的字典属性__dict__(当前类自己的一些attributes)

 

构造器

。__new__,真正负责构造对象的函数,是一个类函数

。__init__,负责初始化经过__new__创建出来的对象

 

析构函数

。__del__,当对象的引用技术为0的时候,就会自动调用__del__来进行释放

。要首先调用基类的__del__

 

可见性

。__*的属性是private的,只有类的内部可以引用

。对于实例对象不存在的属性进行复制,会动态创建这个属性,新式类可以通过设定__slot__的类属性来防止这个问题

 

每个对象,每个类都有自己的namespace(__dict__)

 

__bases__类属性

。返回包含所有祖先类的元组信息

 

继承覆盖方法

。子类会覆盖父类的同名方法

。通过Base.method(self)的方法来显示调用确定的父类的方法

。super()函数能够自动找到父类的方法,并且传入self,super仅仅适用于新式类

 

多重继承

。方法解释顺序(MRO)

。经典类采用的是深度优先的算法

。新式类采用的是广度优先的算法

 

*attr

.has,get,set,del

.不仅仅作用于类和实例

 

其他相关内建函数

。issubclass(sub,sup),判断是否为子类

。isinsance(obj l,class Type),判断是否为类的实例

[展开全文]

QQ客服: 810476411

QQ咨询: 810476411

QQ吐槽: 810476411

服务时间: 9:00 - 21:00

刘老师: 18516031455

微信公众号:开源力量