多进程与多线程的应用
07.07自我总结
一.多进程的应用
1.多进程模块
multiprocessing
其中常用到的几个功能
process
用于定义进程
#定义进程有两种方式 from multiprocessing import process #第一种方式定义个方法 def func(aaa): pritn(123) if __name__ == '__main__': process = process(target=func,args=(123,)) #将target表现进程的任务名称 ,如果任务需要传参就加args 注意:传参必须是集合的形式即使参数只有一个 #第二种定义个类 class proce(process): #用类的方法继承process def run(self): #run方法为任务执行的内容 print('1') if __name__ == '__main__': process = proce() 如果任务需要传参, class proce(process): # 用类的方法继承process def __init__(self,data): super().__init__() self.data = data def run(self): print(self.data) if __name__ == '__main__': process = proce(1111)
lock
:用于定义一个互斥锁
- 定义锁
active_children
:查看当前还在运行的自进程信息
cpu_count
:查看cpu进程
2.进程的方法
is_alive():返回进程是否在运行。
join([timeout]):阻塞当前上下文环境的进程程,直到调用此方法的进程终止或到达指定的timeout(可选参数)。
start():进程准备就绪,等待cpu调度
run():strat()调用run方法,是主进程了运行了run而不是子进程
terminate():不管任务是否完成,立即停止工作进程
3.进程的属性
daemon:守护进程
exitcode(进程在运行时为none、如果为–n,表示被信号n结束)
name:进程名字。
pid:进程号。
4,进程的守护
使用了daemon
如果
实例化程序a.daemon = true 说明该进程守护主进程,当主进程结束了该子进程默认会跟着结束
如果不做处理deamon默认为false
5.子进程的运行在linux与windows中区别
在windows开启一个子进程他会把主程序自上而下重新运行一遍,所以我们在windows中必须把和子程序相关的丢入main里面中
在linux中只是会记录主程序的自上而下运行后最后的运行状态,而不会重新运行一遍,所以在linux中也不需要丢入main
综上所述还是将子进程丢入main里面运行更加合适
二.多线程的应用
1.多线程的模块
threading
其中常用到的几个功能
thread
:创建线程,方法与进程相同
lock
:互斥锁
lock = threading.lock() 创建锁
- lock.acquire()加锁
lock.release()解锁
rlock
: 也是种互斥锁lock允许在同一线程中被多次acquire。而lock却不允许这种情况
active_count
:存活的线程数量,返回的个数中包含主线程。
enumerate
:方法返回当前运行中的thread对象列表
2.线程的方法
与进程相似
is_alive():返回进程是否在运行。
join([timeout]):阻塞当前上下文环境的线程,直到调用此方法的进程终止或到达指定的timeout(可选参数)。
start():进程准备就绪,等待cpu调度
run():strat()调用run方法,是主线程了运行了run而不是子进程
terminate():不管任务是否完成,立即停止工作线程
3.线程的属性
与进程相似
daemon:守护线程
is_alive:是否存活
name:进程名字。
idend:线程号。
4.线程的守护
与进程相似
5.子线程的运行在linux与windows中区别
没有区别,都与进程在linux运行的方式一样
上一篇: Python基础笔记(字符串和list和tuple)
下一篇: Python——类和对象(一)