- 进程间的通信
进程间各自的数据都是彼此独立的。进程间的通信是如何实现的呢?
队列
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