1.线程
# 进程是计算机中最小的资源分配单位
# 数据隔离的
# 歪歪 陌陌 飞秋 qq 微信 腾讯视频
# 一个进程
# 和一个人通信
# 一边缓存 一边看另一个电影的直播
# 进程
# 创建进程 时间开销大
# 销毁进程 时间开销大
# 进程之间切换 时间开销大
# 如果两个程序 分别要做两件事儿
# 起两个进程
# 如果是一个程序 要分别做两件事儿
# 视频软件
# 下载A电影
# 下载B电影
# 播放C电影
# 启动三个进程来完成上面的三件事情,但是开销大
# 线程
# 是进程中的一部分,每一个进程中至少有一个线程
# 进程是计算机中最小的资源分配单位(进程是负责圈资源)
# 线程是计算机中能被CPU调度的最小单位 (线程是负责执行具体代码的)
# 开销
# 线程的创建,也需要一些开销(一个存储局部变量的结构,记录状态)
# 创建、销毁、切换开销远远小于进程
# python中的线程比较特殊,所以进程也有可能被用到
# 进程 :数据隔离 开销大 同时执行几段代码
# 线程 :数据共享 开销小 同时执行几段代码
# 进程模块
# multi multiple 多元的
# processing 进程
import os
import time
print('start')
time.sleep(20)
print(os.getpid(),os.getppid(),'end')
#pid process id 任务栏中可以查看
#ppid parent process id
# 子进程
# 父进程 在父进程中创建子进程
# 在pycharm中启动的所有py程序都是pycharm的子进程
import os
import time
from multiprocessing import Process
def func():
print('start',os.getpid())
time.sleep(1)
print('end',os.getpid())
if __name__ == '__main__':
p = Process(target=func)
p.start() # 异步 调用开启进程的方法 但是并不等待这个进程真的开启
print('main :',os.getpid())
import os
import time
from multiprocessing import Process
def eat():
print('start eating',os.getpid())
time.sleep(1)
print('end eating',os.getpid())
def sleep():
print('start sleeping',os.getpid())
time.sleep(1)
print('end sleeping',os.getpid())
if __name__ == '__main__':
p1 = Process(target=eat) # 创建一个即将要执行eat函数的进程对象
p1.start() # 开启一个进程
p2 = Process(target=sleep) # 创建一个即将要执行sleep函数的进程对象
p2.start() # 开启进程
print('main :',os.getpid())
import os
import time
from multiprocessing import Process
def func():
print('start',os.getpid())
time.sleep(1)
print('end',os.getpid())
if __name__ == '__main__':
p = Process(target=func)
p.start() # 异步 调用开启进程的方法 但是并不等待这个进程真的开启
print('main :',os.getpid())
# 操作系统创建进程的方式不同
# windows操作系统执行开启进程的代码
# 实际上新的子进程需要通过import父进程的代码来完成数据的导入工作
# 所以有一些内容我们只希望在父进程中完成,就写在if __name__ == '__main__':下面
# ios linux操作系统创建进程 fork
# 主进程和子进程之间的关系
import os
import time