多进程
进程池
1 | from multiprocessing import Pool |
使用 Queue
1 | from multiprocessing import Process, Queue |
使用管道
1 | from multiprocessing import Process, Pipe |
其他进程通信
- Value
- Manager
线程
不使用线程
1 | from time import sleep, ctime |
输出:
1 | starting at: Fri Jan 5 22:44:25 2018 |
程序按序执行,一共执行了 12 秒
thread 模块
该模块是不推荐使用的,但是还是可以看看如果使用,使用 thread 改写上面的例子:
1 | from time import sleep, ctime |
输出:
1 | starting at: Fri Jan 5 22:52:00 2018 |
线程 0 和 1 是同时运行的,线程 1 先运行完,主线程等待两个线程都执行完后再执行。
threading 模块
threading 模块中有个 Thread 类,使用他来创建线程有很多方法,下面介绍两种方法:
创建 Thread 的实例,传给它一个函数
1 | import threading |
派生 Thread 的子类,并创建子类的实例
1 | import threading |
一个更加实际的例子
1 | from atexit import register |
线程池
1 | import threadpool |
同步原语
锁
下面是使用锁的一个例子
1 | from atexit import register |
也可以使用上下文管理:
1 | with lock: |
信号量
表示不是很理解
1 | from atexit import register |