python 第16节 进程和线程(2)进程间通信

  1. 进程间的通信

进程间各自的数据都是彼此独立的。进程间的通信是如何实现的呢?

队列

Python 提供了Queue模块实现队列功能。Queue 的常用方法如下:

Q = Queue(n):创建一个队列,队列大小是n,可以省略,队列大小就是无数个,依赖于内存的大小了;

Queue.empty():队列是否为空;

Queue.full():队列是否已经满;

Queue.get():从队列中获取最前面的信息,获取完成后,队列信息出栈。可以设置是否阻塞。

Queue.get_nowait():不阻塞的获取队列信息;

Queue.put():向队列中写入信息,可以设置阻塞和不阻塞,队列满的时候会抛出异常;put_nowairt()是无阻塞的写入信息。

所谓阻塞就是要一直等待有进程写入信息后才会获取到信息然后继续执行否则一直等待,也可以是设置等待的时间。等待时间到了以后进程继续向下执行。

使用队列实现进程间通信就是创建一个全局队列,进程都使用这一个全局队列进行操作。

16-1

16-2

2.线程

线程是系统调度的最小单位。线程是在进程中创建的,一个进程内创建的线程都共享进程的资源。

2.1 线程的创建

2.1.1 使用Thread

使用threading 中的Thread类创建一个线程。

创建线程的方式见下图:

16-3

2.1.2 使用Thread子类

创建方式如下图:

16-4

2.2 线程间的通信

1.线程之间是共享资源的,因此可以通过共享资源的方式进行通信。如下图:

16-5

16-6

当然也可以使用队列的方式,和进程中使用队列的方式是一样的。

3互斥锁

线程之间的同步一般要使用锁的方式,即一个线程要等另外的一个或者多个线程满足了一定的条件才会执行。也可以是说是对资源访问的控制,具体的场景依赖于实际的项目开发,看对锁实际的使用方式。使用队列也可以达到这样的目的。互斥锁只有一个值,要么锁要么被释放,获取锁则这把锁就被锁了,后面再获取锁就会被阻塞,知道锁被释放了。

使用方式如下图:

16-7

16-8

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱玩研究室

多谢鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值