进程、线程
现代操作系统比如Mac OS X,UNIX,Linux,Windows等,都是支持“多任务”的操作系统。
进程:就是一个程序,运行在系统之上,那么便称之这个程序为一个运行进程,并分配进程ID方便系统管理。
线程:线程是归属于进程的,一个进程可以开启多个线程,执行不同的工作,是进程的实际工作最小单位。
操作系统中可以运行多个进程,即多任务运行
一个进程内可以运行多个线程,即多线程运行
注意点:
进程之间是内存隔离的,即不同的进程拥有各自的内存空间。这就类似于不同的公司拥有不同的办公场所。
线程之间是内存共享的,线程是属于进程的,一个进程内的多个线程之间是共享这个进程所拥有的内存空间的。
并行执行
并行执行的意思指的是同一时间做不同的工作。
进程之间就是并行执行的,操作系统可以同时运行好多程序,这些程序都是在并行执行。
除了进程外,线程其实也是可以并行执行的。
也就是比如一个Python程序,其实是完全可以做到:
-
一个线程在输出:你好
-
一个线程在输出:Hello
像这样一个程序在同一时间做两件乃至多件不同的事情,我们就称之为:多线程并行执行
多线程编程
Python的多线程可以通过threading模块来实现。
# 多线程
import threadingthread_obj=threading.Thread(group=None, target=None, name=None, args=(), kwargs=None)
# group:暂时无用,未来功能的预留参数
# target:执行的目标任务名
# name:线程名,一般不用设置
# args:以元组的方式给执行任务传参
# kwargs:以字典的方式给执行任务传参# 启动线程,让线程开始工作
thread_obj.start()
示例:
# 多线程
import time
import threadingdef sing():while True:print('在唱歌,啦啦啦')time.sleep(1)def dance():while True:print('在跳舞,嗨嗨嗨')time.sleep(1)if __name__ == '__main__':# 创建一个唱歌的线程thread_sing = threading.Thread(target=sing)# 创建一个跳舞的线程thread_dance = threading.Thread(target=dance)# 启动线程,让线程开始工作thread_sing.start()thread_dance.start()
需要传参的话可以通过:
-
args参数通过元组(按参数顺序)的方式传参
-
或使用kwargs参数用字典的形式传参
# 多线程(传参)
import time
import threadingdef sing(msg: str):while True:print(msg)time.sleep(1)def dance(msg: str):while True:print(msg)time.sleep(1)if __name__ == '__main__':# 创建一个唱歌的线程thread_sing = threading.Thread(target=sing, args=('我在唱歌,啦啦啦',)) # 元组单个值需要末尾加,# 创建一个跳舞的线程thread_dance = threading.Thread(target=dance, kwargs={'msg': '我在跳舞,嗨嗨嗨'})# 启动线程,让线程开始工作thread_sing.start()thread_dance.start()