您的位置:首页 > 编程语言 > Python开发

python多进程与多线程

2020-01-15 10:10 369 查看

1、概念
  进程(Process)是计算机中的程序关于某数据集合上的一次运行活动;
  线程(thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。在Unix System V及SunOS中也被称为轻量进程(lightweight processes),但轻量进程更多指内核线程(kernel thread),而把用户线程(user thread)称为线程。
2、使用

  1. 多进程
from multiprocessing import Process
import os,time

def work(times):
i=0
for i in range(times):
i+=1

if __name__ == "__main__":
cpu_num=os.cpu_count()
print('cpu个数:',cpu_num)
l = []
start = time.time()
for i in range(cpu_num):    #用全部cpu同时计算,可到任务管理器看cpu利用率,接近100%
p = Process(target=work,args=(100000000,)) #创建并运行子进程
p.start()
l.append(p)
for p in l:
p.join()    #等待所有子进程运行完
stop = time.time()
print("运行时间:%s"%(stop - start))
```![多进程运行时间](https://img-blog.csdnimg.cn/20191112212914569.png)![单进程运行时间](https://img-blog.csdnimg.cn/20191112213317715.PNG)



2. 多线程

from threading import Thread
import os,time

def work(times):
res = 0
for i in range(times):
res += i

if __name__ == "__main__":
cpu_num=os.cpu_count()
print('cpu个数:',cpu_num)
l = []
start = time.time()
for i in range(cpu_num):  #cpu利用率并未提升,因为多线程是并发执行的,非并行,即宏观上同时执行,微观上先后执行
p = Thread(target=work,args=(100000000,))  # 多线程
p.start()
l.append(p)
for p in l:
p.join()
stop = time.time()
print("运行时间:%s"%(stop - start))


注意: 多线程运行所花的时间比单进程运行所花的时间还要长主要是因为python多线程需要用到GIL这个东西,它会获取和释放锁,具体解释可参考python多线程运行变慢, 因而需要的时间比正常单核执行的时间还要长,但多线程处理能够提高并发度。

  • 点赞
  • 收藏
  • 分享
  • 文章举报
成长的菜鸟。。。 发布了15 篇原创文章 · 获赞 2 · 访问量 1165 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: