python的多线程与多进程
文章目录
不用多进程和多线程
import time
def sing():
for i in range(3):
print("跳舞...")
time.slrrp(1)
def sing():
for i in range(3):
print("唱歌...")
time.slrrp(1)
if __name__=='__main__':
sing()
dance
多进程是什么
进程是指一个程序在给定数据集合上的一次执行过程,是系统进行资源分配和运行调用的独立单位。可以简单地理解为操作系统中正在执行的程序。也就说,每个应用程序都有一个自己的进程。
每一个进程启动时都会最先产生一个线程,即主线程。然后主线程会再创建其他的子线程。
使用步骤
1.引入库
代码如下(示例):
import multiprocessing
#公式:进程对象=multiprocessing.Process(targe=任务名)
2.传参的方式:元组与字典
args:以元组的方式执行任务传参
kwargs:以字典的方式给执行任务传参
例如:
(1)
#target:线程执行的函数名
#arge:表示以元组的方式给函数传参,元组是用()的
sing_process=multiprocessing.Process(target=sing,args=3,))
#这里3后面的“,”不能去掉
#开启线程
sing_process.start()
(2)
#target:线程执行的函数名
#kwarge:表示以字典的方式给函数传参,字典是用{}的
sing_process=multiprocessing.Process(target=sing,kwargs={“count”:3})
#count只是个名字而已
#开启线程
sing_process .start()
3.读入数据
代码如下(示例):
import multiprocessing
def sing(num,name):
for i in range(num):#num是当前函数的参数
print(name)
print("唱歌")
def dance(count):
for i in range(count):#count是当前函数的参数
print("跳舞")
if __name__== '__main__':
#以元组的方式给函数传参
sing_process = multiprocessing.Process(target=sing,args=(3,"xiaoming"))
#在这里传参的时候要切记顺序,顺序不能乱
#以字典的方式给函数传参
dance_process = multiprocessing.Process(target=dance,kwargs={"count":2})
#开启进程
sing_process.start()
dance_process.start()
多线程是什么
线程是一个基本的CPU执行单元。它必须依托于进程存活。一个线程是一个execution context(执行上下文),即一个CPU执行时所需要的一串指令。
使用步骤
1.引入库
代码如下(示例):
import threading
2.传参的方式:元组与字典
args:以元组的方式执行任务传参
kwargs:以字典的方式给执行任务传参
例如:
(1)
#target:线程执行的函数名
#arge:表示以元组的方式给函数传参,元组是用()的
sing_thread=threading.Thread(target=sing,args=3,))
#这里3后面的“,”不能去掉
#开启线程
sing_thread.start()
(2)
#target:线程执行的函数名
#kwarge:表示以字典的方式给函数传参,字典是用{}的
sing_thread=threading.Thread(target=sing,kwargs={“count”:3})
#count只是个名字而已
#开启线程
sing_thread.start()
3.读入数据
代码如下(示例):
import threading
def sing(num,name):
for i in range(num):#num是当前函数的参数
print(name,":唱歌")
def dance(count):
for i in range(count):#count是当前函数的参数
print("跳舞")
if __name__== '__main__':
#以元组的方式给函数传参
sing_thread = threading.Thread(target=sing,args=(3,"xiaoming"))
#在这里传参的时候要切记顺序,顺序不能乱
#以字典的方式给函数传参
dance_thread = threading.Thread(target=dance,kwargs={"count":2})
#开启进程
sing_thread.start()
dance_thread.start()
多进程与多线程的区分
1.线程必须在某个进程中执行。
2.一个进程可包含多个线程,其中有且只有一个主线程。
3.多线程共享同个地址空间、打开的文件以及其他资源。
4.多进程共享物理内存、磁盘、打印机以及其他资源。
注意
多线程和多进程都是无序的
选择多线程还是多进程?
在这个问题上,首先要看下你的程序是属于哪种类型的。一般分为两种:CPU密集型和I/O密集型。
CPU 密集型:程序比较偏重于计算,需要经常使用CPU来运算。例如科学计算的程序,机器学习的程序等。
I/O 密集型:顾名思义就是程序需要频繁进行输入输出操作。爬虫程序就是典型的I/O密集型程序。
如果程序是属于CPU密集型,建议使用多进程。而多线程就更适合应用于I/O密集型程序。
守护主进程
因为主线程是等所有子线程结束后再结束的,如果希望主线程执行完毕之后,不管子线程是否执行完毕都随着主线程一起结束。我们可以使用setDaemon(bool)函数,它跟join函数是相反的。它的作用是设置子线程是否随主线程一起结束,必须在start() 之前调用,默认为False。
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了python多线程和多进程的使用,python多线程和多进程的使用还有很多种情况,这里只是讲了比较简单的情况