当前位置:   article > 正文

多进程和多线程编程操作_了解多线程多进程么 怎么写多进程编程

了解多线程多进程么 怎么写多进程编程

1.什么是进程

进程是系统最小的资源管理单元,是一个程序在一个数据集上的一次动态执行过程。

2.什么是线程

线程是计算机程序运行的实际执行者,是cpu的执行单元,在计算机中,进程主要是为了线程的执行进行分配资源操作,程序真正的执行者是线程,每一个进程至少有一个线程用于执行程序。一个进程可以有多个线程,而一个线程只服务于一个进程。

3.程序执行方法

  • 串行   按照一定的步骤执行每个环节
  • 并行   同时执行接收到的多个任务
  • 并发   同时接受多个任务,同时执行多个任务,但是在某一时刻只执行一个在很短时间内多任务切换。

4.多线程编程

在python里一共内置了两种多线程模块,_thread和threading模块,其中对于python3.x的用户来说,最好使用threading模块。

  • _thread模块     

常用的有下列方法:

_thread.get_ident()     获取当前线程
_thread.start_new_thread()创建一个新线程
  
  • threading模块

threading模块下的一些属性与方法
threading.Thread创建及管理线程
threading.Event事件类,用于线程同步
threading.Condition条件类,用于线程同步
threading.Lock/RLock锁类,用于线程同步
threading.Timer延时线程
threading.active_count()获取当前alive的线程数量
threading.current_thread()获取当前正在执行的对象
threading.get_ident()获取当前线程的编号及名称
threading.envmerate()获取当前alive的线程列表
threading.main_thread()获取主线程信息
 

 

 

 

 

 

 

 

 

 

 

 

 

 

        1.Thread模块

Thread模块下的方法

__init__(group,target,name,args,kwargs) 创建进程,括号内是创建进程的一些属性 is_alive 判断进程的alive状态 run() 执行线程的方法(最好不直接使用) start() 线程启动方法 join([timeout=None]) 线程独占,在线程执行完之前或者超时之后阻塞进程 ident 当前线程的唯一编号 name 当前线程的名称 daemon 判断是否是守护线程    

          2.current_thread模块

current_thread模块下的方法

get_name()当前线程名称
  

            3.Lock/RLock模块(互斥锁/可重用锁)

模块下的方法

acquire()上锁
release()解锁
  

            4.Dead Lock(死锁)

当cpu进行并发时间片切换操作时恰好遇到了重复上锁的情况,于是程序就会被锁死,不再执行结束

             5.Condition模块

acquire()上锁
release()解锁
wait()解锁,同时阻塞当前进程,等待被进程唤醒
wait_for()解锁,同时阻塞当前线程,等待被特定进程唤醒
notify()唤醒
notify_all()唤醒所有等待的线程
  

            6.Event模块

set()添加标记
wait()等待
clear()清除标记
  
  • queue模块(队列)

queue.Queue().put( , [timeout=None])  向队列中添加,直到队列满或者超时

queue.Queue().get( , [timeout=None]) 从队列中取出,直到队列为空或者超时

 

5.多进程编程

  • multiprocessing模块

multiprocessing模块中常用属性和方法
Process进程类型,用于创建进程和管理进程
Lock/RLock互斥锁\重用锁, 用于进程同步
Event事件类型,用于进程同步
Condition条件类型,用于进程同步
Queue队列类型
Manager进程管理类型
Listener | Client进程监听\客户端
  
  • os模块

os.getpid()  展示当前进程编号

os.getppid()   展示当前父进程编号

  • 面向对象的多线程的操作
  1.  引入需要的模块
  2. 定义类型
  3. 继承父类(multiprocessing.Process)
  4. 初始化 ------>可以添加参数
  5. 重写run()方法
  6. 创建并启动进程
  • 多进程对变量的处理

全局变量经过多个进程处理后,并不会发生变化,因为进程在运行时,会把需要的数据复制一份,然后再进行操作。

  • pool进程池
apply(func,args)传递参数args并执行函数func,同时阻塞进程池,直到当前函数执行完成
apply_async(func,args,callback,error_callback)这种方法不会阻塞进程池
close()主动停止向进程池中提交任务
terminate()主动结束该进程,当进程池对象被回收时自动调用
join()等待工作进程退出,独占
  
  • 多进程通信 multiprocessing.Manager
Array进程间共享数组类型
Queue进程间共享队列类型
list()进程间共享列表类型
dict()进程间共享字典类型
Value进程间共享值类型
Barrier 
BoundedSemaPhorel   |  SemaPhore

进程信号量类型

Lock | RLock进程互斥锁 | 重用锁
Event同步事件类型
Condition同步条件类型
  
  • 多进程通信 multiprocessing.Queue
put(data, [ , timeout=None])添加一个数据
put_nowait(data)非阻塞模式
get([timeout=None])获得一个数据
get_nowait()非阻塞模式
full()判断队列已满
empty()判断队列已空
close()关闭
qsize()获取队列中元素数量
  
  • 多进程通信 multiprocessing.Pipe

multiprocessing.Pipe.send(data)   发送消息

multiprocessing.Pipe.recv()     接收消息

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/197647
推荐阅读
相关标签
  

闽ICP备14008679号