文章目录
多任务:
多任务的概念: 同一时间执行多个任务
多任务的作用:充分的利用cpu资源提高程序的效率
多任务的表现形式:
并发:操作系统执行任务时是以交替的执行方式
并行: 操作系统执行任务时会给每个cpu安排任务这种才是同时执行
进程:
什么是进程:
进程是操作系统资源分配的基本单位,程序运行起来就叫进程
进程的作用
使用多进程能实现多任务的编程
进程的创建步骤:
1.导入进程包:
import multiprocessing
2.通过进程类创建进程对象
进程对象=multiprocessing.Process(target= ,name= ,group=)
target:执行的任务名,这里指的是函数名
name: 进程名,一般不设置
group: 进程组,目前智能使用None
3.启动进程执行任务:
进程对象.start()
实例:
import multiprocessing
import time
def sing():
for i in range(3):
print("唱歌...")
time.sleep(0.5)
def dance():
for i in range(3):
print("跳舞..")
time.sleep(0.5)
if __name__=="__main__":
process_sing=multiprocessing.Process(target=sing)
process_dance=multiprocessing.Process(target=dance)
process_sing.start()
process_dance.start()
进程执行带有参数
元组传参(args):
进程对象=multiprocessing.Process(target=执行的函数名,args=(值1,))
字典传参(kwargs):
进程对象=multiprocessing.Process(target=dance,kwargs={“参数名”:值1})
获得进程编号
导包:
import os
获得当前进程编号:
os.getpid()
获得当前父进程编号:
os.getppid()
设置子进程守护主进程(daemon)
要是想主进程结束后子进程也结束就得设置因为:
主进程会等所有的子进程执行结束后在结束,除非设置子进程守护主进程.
语法:
子进程对象.daemon=True
线程
什么是线程:
多线程是python程序中实现多任务的一种方式
线程是程序执行最小的单位
同属一个进程的多个线程共享进程所有的全部资源
多线程的优点:
多线程类似于同时执行多个不同程序,多线程运行有如下优点:
-
使用线程可以把占据长时间的程序中的任务放到后台去处理。
-
用户界面可以更加吸引人,比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度。
-
程序的运行速度可能加快。
-
在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。在这种情况下我们可以释放一些珍贵的资源如内存占用等等。
线程创建的步骤:
1.导入线程模块
import threading
2.通过线程类创建线程对象
sing_thread=threading.Thread(target=sing)
3.启动线程执行任务
sing_thread.start()
线程对象=hreading.Thread(target= ,name= ,group=)
target:执行的任务名,这里指的是函数名
name: 线程名,一般不设置
group: 进程组,目前智能使用None
线程带参数执行任务
实例;
import threading
import time
def sing(num,name):
for i in range(num):
print(name+"..唱歌..")
time.sleep(1)
def dance(count,name):
for i in range(count):
print(name+"..跳舞..")
time.sleep(1)
if __name__ == "__main__":
# args: 以元组的方式给执行任务传递参数
sing_thread=threading.Thread(target=sing,args=(3,"小"))
# kwargs:以字典方式给执行任务传递参数
dance_thread=threading.Thread(target=dance,kwargs={"count":2,"name":"xiao"})
sing_thread.start()
dance_thread.start()
设置守护主线程的两种方法:
实例:
import threading
import time
def work():
for i in range(3):
print("..工作..")
time.sleep(1)
if __name__ == "__main__":
# sing_thread=threading.Thread(target=work)
#
# sing_thread.start()
# 主线程结束时不想等待子线程结束在结束
# 方法一:
# sing_thread = threading.Thread(target=work,daemon=True)
# 方法二:
sing_thread = threading.Thread(target=work)
sing_thread.setDaemon(True)
sing_thread.start()
print("...主线程结束了...")
线程之间执行时无序的
进程和线程的对比:
关系对比:
1. 线程时依附在进程里面的,没有进程就没有线程
2. 一个进程默认提供一条线程,进程可以创建多个线程
区别对比:
1.创建进程的资源要比创建线程的资源开销要大
2.进程时操作系统资源分配的基本单位,线程是cpu调度的基本单位
3.线程不能独立执行必须依附在进程
优缺点对比
1.进程优缺点:
优点:可以用多核
缺点:资源开销大
2.线程优缺点:
优点 :资源开销小
缺点:不能使用多核