Python浅聊进程(multiprocessing)和线程(threading)

目录

一、进程(Process)

1.1、定义

1.2、类(Process)

1.3、把进程创成类

1.4、daemon属性

1.5、join方法

1.6、进程池(Pool)

1.7、进程间通信

二、线程(Thread)

2.1、定义

2.2、多线程编程

2.2.1、创建线程

2.2.2、线程隔离(Join方法)

2.2.3、互斥锁

2.2.4、Condition条件变量

2.2.5、线程间通信

2.2.6、后台线程


一、进程(Process)

1.1、定义

        进程是操作系统中用来描述程序运行时资源分配的最小单位。做个比喻,你在windows上一边敲代码一边听歌,这时候可以理解为有两个任务同步进行,也就是启动了两个进程。在单核CPU执行处理时,进程是按照顺序依次执行的,由于cpu执行速率很快,所以我们一般感知不到进程之间的切换。多核CPU实现了真正意义上的并行执行进程。

1.2、类(Process)

        创建进程时用的类

  格式:    P = multiprocessing.Process(target=调用对象,args=(调用对象实参1,调用对象实参2))

                P.start()   # 打开进程

1.3、把进程创成类

        我们也可以把进程创建成一个类,当p调用start()时,自动调用run()方法,举例如下:

 输出结果为:

1.4、daemon属性

        当子进程添加了Daemon属性后,当主进程结束的时候,子进程也会跟着结束。

1.5、join方法

        Join方法主要作用是阻塞当前进程,直到join方法的进程执行完,再执行父进程。

1.6、进程池(Pool)

        在程序构造过程中,我们可以使用进程池的方法批量构建子进程

         输出为:(建议用cmd命令框直接执行py文件,pycharmIDE不支持)

1.7、进程间通信

        进程之间需要数据通信时,可以用Queue方法来交换数据。在父进程中创建一个写数据子进程,和一个读数据子进程,如下图所示:

 结果如图:

二、线程(Thread)

2.1、定义

        在一个进程中,我们不仅仅只做一件事.比如打开音乐接收器,我们可能一边听歌,一边下载歌曲,这些都被统称为进程中的一些子任务,也就是线程。在执行多任务时,我们通常用三种方法来提高执行效率:多进程/多线程/多进程多线程方法。

2.2、多线程编程

        线程的运行状态:创建-》就绪等待使用-》运行-》阻塞-》删除

2.2.1、创建线程

        Python一共两个模块用来操作线程,分别为thread和threading,开发时常用后者。

        格式:T =  threading.Thread(target=调用对象,args=(调用对象实参1,调用对象实参2))

                   T.start()   # 打开线程

2.2.2、线程隔离(Join方法)

        为了保证子线程在主线程执行结束前优先结束,可以采取join方法,来保证子线程执行完后才会结束主线程。

2.2.3、互斥锁

        在线程同步执行获取数据的过程中,容易造成数据不同步现象,这时候可以给资源加锁,也就是说访问资源的线程必须通过锁才能访问。

2.2.4、Condition条件变量

        针对互斥锁的acquire和release方法外,多出了wait和notify方法,当一个线程进入wait方法等待执行时,先执行其余可执行线程。当可执行线程执行完后,配置并执行notify命令,此时将从剩余wait线程中进行选举,当其中一个线程继续执行时,其余wait线程继续等待。

Consumer(顾客端):

 Producer(商家处):

 主程序:

2.2.5、线程间通信

        当程序中有多个线程需要相互通信时,我们通过queue库的队列对线程之间的信息进行安全交换。创建Queue对象,线程是用put()向队列添加元素,用get()删除元素

2.2.6、后台线程

        默认情况下主线程退出后,子线程仍就会继续执行。如果希望主线程退出后子线程也退出,则需要使用setDeamon方法,设置子线程为后台进程。

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值