进程和线程
今天我们使用的计算机早已进入多CPU或多核时代,而我们使用的操作系统都是支持“多任务”的操作系统,这使得我们可以同时运行多个程序,也可以将一个程序分解为若干个相对独立的子任务,让多个子任务并发的执行,从而缩短程序的执行时间,同时也让用户获得更好的体验。因此在当下不管是用什么编程语言进行开发,实现让程序同时执行多个任务也就是常说的“并发编程”,应该是程序员必备技能之一。为此,我们需要先讨论两个概念,一个叫进程,一个叫线程。
概念
进程就是操作系统中执行的一个程序,操作系统以进程为单位分配存储空间,每个进程都有自己的地址空间、数据栈以及其他用于跟踪进程执行的辅助数据,操作系统管理所有进程的执行,为它们合理的分配资源。进程可以通过fork或spawn的方式来创建新的进程来执行其他的任务,不过新的进程也有自己独立的内存空间,因此必须通过进程间通信机制(IPC,Inter-Process Communication)来实现数据共享,具体的方式包括管道、信号、套接字、共享内存区等。
import multiprocessing
def A():
print('hello')
if __name__ == "__main__":
#创建进程
p = multiprocessing.Process(target)
p.start() #启动进程
p.join()
print('Over')
Python进阶
1.PEP8编码规范,以及开发中的一些惯例和建议
(1)代码编排:
a.缩进4个空格,禁止空格与Tab混用
b.行长80:防止单行逻辑过于复杂
(2)import
a.不要使用from xxx import *
b.顺序
标准库
第三方库
自定义库
c.单行不要import多个库
d.模块内用不到的不用去import
(3)命名
a.除非在lambda函数中,否则不要用单字母的变量名
b.包名、模块名、函数名、方法名全部使用小写,单词间用下划线连接
c.类名,异常名使用首字母大写的方式
d.全局变量尽量使用大写,一组同类型的全局变量要加上统一前缀,单词用下划线连接。
(4)字符串拼接尽量使用join方式:速度快,内存消耗小
(5)语义明确,直白
a.xx not in yy
b.a is not b
2.*args返回的是元组,*kwargs返回的是字典
(1)函数定义
def foo(*args,**kwargs):
pass
(2) 参数传递
def foo(x,y,z,a,b):
print(x)
print(y)
print(z)
print(a)
print(b)
1st = [1, 2, 3]
dic = {'a':22,'b':77}
foo(*1st,**dic)
3.Python的赋值和引用
(1)==:判断的是值,is:判断的是内存地址(即对象的id)
(2)copy:只拷贝表层元素
deepcopy:在内存中重新创建所有子元素
4.装饰器
(1) 示例:
def deco(func):
#print(func)
#print("lalala")
def wrap():
print('登录失败')
return func()
return wrap
@deco
def A():
print('Joker')
@deco
def B():
print('Joker2')
A()
B() #输出登录失败
Joker
登录失败
Joker2
(2)输出两个数字,装饰器的作用是求这两个数字的和,本函数的作用是打印这两个数字的和
def deco(func):
def wrap(n,n1):
sum_ = n + n1
return func(sum_,n1)#A()
return wrap
@deco
def A(name,name2):
print(name)
A(10,20) #输出30
(3)在使用装饰器的情况下,无论你输入什么验证码都返回验证码错误,如果不使用,该正确就打印正确
import random
def deco(func):
def warp(n1,n2):
n1 = -1
return func(n1,n2)
return warp
#@deco
def A(n1,n2):
if n1 == n2:
print('验证码正确')
else:
print('验证码错误')
num = random.randrange(1000,9999)
print('验证码是:%d'%num)
num2 = int(input('>>'))
A(num,num2)
(4)404,请求网页成功
import time
TIME1 = 0
TIME2 = 0
def check_ip(func):
def warp(*args,**kwargs):
if round(abs(TIME2-TIME1),3)<0.5:
print('404')
else:
return func(*args,**kwargs)
return warp
@check_ip
def A(ip):
print('进入网页成功')
#模拟请求
for _ in range(50):
ip = '127.0.0.1'
TIME1 = time.time()
A(ip)
TIME2 = time.time()
time.sleep(1)
5.函数闭包
示例:
def foo():
l = []
def bar(i):
l.append(i)
return l
return bar
f1 = foo()
f2 = foo()
f1(1)
f1(2)
f2(3)