线程、进程

python由于有全局解释锁(GIL)的原因,Python 的线程被限制到同一时刻只允许一个线程执行这样一个执行,所以妨碍了其真正的使用功效,但是对于IO型程序并没有多少影响,后续说解决办法

线程(对于IO密集型程序可以大幅提高程序运行速度,减少执行时间)

python3 目前推荐使用threading

import timestart = time.time()def look_thread(name):for i in range(5):time.sleep(0.5)print('主程序{}运行'.format(name))look_thread('1')
look_thread('2')
end = time.time()
print(end-start)

这个是无线程运行后输出的结果以及所花费的时间

主程序1运行
主程序1运行
主程序1运行
主程序1运行
主程序1运行
主程序2运行
主程序2运行
主程序2运行
主程序2运行
主程序2运行
5.005494832992554

接下来看看使用线程后的程序

import threading
import time
from threading import Threadstart = time.time()
def look_thread(name):for i in range(5):time.sleep(0.5)# print('主程序{}运行'.format(name))print("线程{}正在运行".format(name))t1 = Thread(target=look_thread,args=('1',)) #创建线程1
t2 = Thread(target=look_thread,args=('2',)) #创建线程2
#t1 = Thread(target=look_thread,args=('1',),daemon=True) #如果不喜欢使用join可以使用保护线程
#t2 = Thread(target=look_thread,args=('2',),daemon=True) #创建线程2
t1.start() #启动线程1
t2.start() #启动线程2
print(threading.active_count()) #现存线程数
t1.join() #将线程1加入到当前线程
t2.join() #将线程2加入到当前线程
print(threading.active_count()) #现存线程数
end = time.time()
print(end-start) #运行时间

结果如下

3
线程1正在运行
线程2正在运行
线程1正在运行
线程2正在运行
线程1正在运行
线程2正在运行
线程1正在运行
线程2正在运行
线程1正在运行
线程2正在运行
1
2.504371404647827

2个对比可以看出,明显不是按照持续执行,且线程数的变化和运行时间的减半

进程(建议在cpu密集型程序使用)

python3 使用multiprocessing,使用方法同threading

import time
from multiprocessing import Process
start = time.time()
def look_thread(name):for i in range(5):time.sleep(0.5)# print('主程序{}运行'.format(name))print("进程{}正在运行".format(name))
if __name__ == "__main__":t1 = Process(target=look_thread,args=('1',))t2 = Process(target=look_thread,args=('2',))t1.start()t2.start()t1.join()t2.join()end = time.time()print(end-start)

结果如下

进程1正在运行
进程2正在运行
进程2正在运行进程1正在运行进程1正在运行
进程2正在运行
进程1正在运行进程2正在运行进程2正在运行
进程1正在运行
2.7984180450439453

参考书籍:python3-cookbook

 

转载于:https://www.cnblogs.com/jay-col/p/11008836.html

python3 线程、进程相关推荐

  1. python3 线程池 ThreadPoolExecutor 简介

    前言 从Python3.2开始,标准库为我们提供了 concurrent.futures 模块,它提供了 ThreadPoolExecutor (线程池)和ProcessPoolExecutor (进 ...

  2. python_21_线程+进程+协程

    python_线程_进程_协程 什么是线程? -- os能够进行运算调度的最小单位,被包含在进程之中,是一串指令的集合 -- 每个线程都是独立的,可以访问同一进程下所有的资源 什么是进程? -- 每个 ...

  3. 打开线程 | 进程 | 协程的大门

    不知从几何起,可能是大三那年的操作系统考试,也可能是刚经历完的秋招,这些概念总是迷迷糊糊,可能自己回答的和其他人的答复也差不多,并没有什么亮点,通常都会以:「我们换个题」的方式结束,有时候也挺尴尬的. ...

  4. linux 线程 进程经典文章

    进程是程 序在计算机上的一次执行活动.当你运行一个程序,你就启动了一个进程.显然,程序是 死的(静态的),进程是活的(动态的).进程可以分为系统进程和用户进程.凡是用于完成操作系统的各种功能的进程就是 ...

  5. PHP 会话 线程 进程,接上节我们来了解了解多进程的一些基础进程 / 线程 / 多进程 / 父进程 / 子进程 / 会话 / 控制终端等...

    多进程的一些基础 定义 进程/父进程/子进程 进程是资源调度和分配的一个独立单元 进程是由线程组成 即等于 一个进程 = 一个线程. 进程是由另一个进程创建 (系统进程 init进程除外) 所以会出现 ...

  6. Python的线程/进程间通讯对象分析

    2019独角兽企业重金招聘Python工程师标准>>> Python提供了一系列的对象支持线程/进程间的通讯: Lock RLock Condition Semaphone Boun ...

  7. python结束进程树_【python爬虫】线程进程

    关注:程序运行速度---->主要是由cpu(大脑)来决定. 想要提高程序的运行速度----->提高cpu利用率. 提高cpu的利用率由两种途径: 1.让cpu不休息.cpu每时每刻都在处理 ...

  8. python的线程如何启用和结束_python线程进程

    操作系统 一 为什么要有操作系统? 现代计算机系统是由一个或者多个处理器,主存,磁盘,打印机,键盘,鼠标显示器,网络接口以及各种其他输入 输出设备组成的复杂系统,每位程序员不可能掌握所有系统实现的细节 ...

  9. 【多线程】线程与进程、以及线程进程的调度

    在了解多线程之前,首先要区分线程和进程的概念与区别,我目前只了解到Java的JVM中与操作系统联系中的线程和进程,在了解线程与进程之前,首先要初步了解电脑中的操作系统的地位和作用. 冯诺依曼体系 计算 ...

  10. linux和Windows线程进程的区别

    1.linux线程进程 linux内核中,进程是用一个task_struct的结构体描述的,也就是进程描述符,里面包含了进程id.进程的地址空间.进程打开的文件信息.挂起的信号.进程的状态等等信息. ...

最新文章

  1. 你需要学好知识图谱——用AI技术连接世界
  2. mysql proxy 延迟严重_使用MySQL Proxy解决MySQL主从同步延迟
  3. 下一代对话系统中的关键技术(下篇)
  4. 利用python爬虫(part15)--cookie模拟登陆
  5. LeetCode 822. 翻转卡片游戏(哈希)
  6. C语言 const 笔记
  7. 潜谈IT从业人员在传统IT和互联网之间的择业问题(上)-传统乙方形公司
  8. 学hadoop需要什么基础
  9. C#cmd执行命令隐藏窗口,并保持程序一直运行
  10. 鳄梨种植者使用传感器节省种植成本
  11. H.264学习过程中遇到的英文缩写整理
  12. Atitit Java内容仓库(Java Content Repository,JCR)的JSR-170 文件存储api标准 目录 1. Java内容仓库 1 2. Java内容仓库 2 2.1.
  13. 服务器系统survey,LimeSurvey:Linux下实现问卷调查系统
  14. 一键美化python代码
  15. 计算机无法登陆提示rpc服务器不可用,电脑rpc服务器不可用,教你电脑rpc服务器不可用怎么解决...
  16. 【蓝桥杯题目分析】2014年第五届——第二题:切面条
  17. 两个地理坐标距离计算
  18. vscode如何添加本地python解释器、解析器 Interpreter?(Python: Select Interpreter)
  19. Python生成九宫格图片
  20. MySQL 使用SQL语句实现 增删改查

热门文章

  1. 数据库的内连接和外连接
  2. Kotlin Monad的学习
  3. 手动部署 ceph mon (luminous 版)
  4. checkbox美化
  5. Python轻量级Web框架Flask(4)——Flask会话技术和Flask模板语言
  6. 视频时长不够怎么延长
  7. python中notebook的快捷键_现在就飞起来!Jupyter Notebook 那些如有神助的快捷操作...
  8. java cookie domain_设置cookie的domain属性
  9. Linux 网卡实时流量查看脚本
  10. 过渡——CSS3动态效果 过渡属性