本系列是学习 廖雪峰 Python3 教程 过程中记录的笔记,本篇文章记录 Python
中的进程和线程的相关内容,主要包括多进程、多线程的实现,ThreadLocal
的使用,以及对异步 I/O
和 分布式进程的介绍。
进程和线程
- 线程是最小的执行单元,而进程由至少一个线程组成。
- 如何调度进程和线程,完全由操作系统决定,程序自己不能决定什么时候执行,执行多长时间。
- 多进程和多线程的程序涉及到同步、数据共享的问题,编写起来更复杂。
多进程
-
在
Unix/Linux/Mac
下,可以使用fork()
调用实现多进程,multiprocessing
模块可实现跨平台的多进程; -
启动几个子进程,使用
Process
模块Process(target=func, args=(,))
; -
启动大量子进程,用进程池
Pool
批量创建,chi.apply_async(func=func, args=(,)
; -
进程间通信是通过
Queue
、Pipes
等实现的;"""Process()创建子进程 记录子进程启动的时间戳""" import time from multiprocessing import Process def action(name): # 待会两个进程要执行的任务↓ content = name for i in range(3): # 循环3次 content += str(time.time()) + ' -> ' time.sleep(0.2) # 等待0.2s print(content) if __name__ == '__main__': # 这行代码很重要,新建进程的时候都加上它!! jc1 = Process(target=action, args=('进程一 时间戳:',)) # 准备建立一个进程:multiprocessing.Process() jc2 = Process(target=action, args=('进程二 时间戳:',)) # 再准备建立一个新进程,这是基本格式记住← jc1.start() # 将蓄势待发的jc1进程正式启动!! jc2.start() # 同上... jc1.join() # 等待进程jc1将任务执行完... jc2.join() # ... print('来自主进程:jc1,jc2任务都已执行完毕') jc1.close(