zoukankan      html  css  js  c++  java
  • python(十三)异常处理、sys模块,jsonpath模块、线程、进程。

    异常处理

    try---except

    ZeroDivisionError除数不能为0

    IndexError 下标越界

    Exception:可以捕获所有异常,不包括语法错误,当不确定具体抛出什么异常时候,可以用Exception

    try-except-else-finally

    raise:主动抛出异常

    sys模块

    sys.argv:获取运行python文件的时候传入的参数

     

    通过pycharm来控制python文件传入的参数

    传入的参数是--help

    传入的参数是端口号

    jsonpath模块

    pip install jsonpath

    获取字典里的key的值,可以用jsonpath。

    jsonpath.jsonpath(dictname,'$..key'),返回的是list

    $:代表字典里面最外边的大括号,..代表模糊匹配。会把所有符合条件的key的值都取出来。

    多线程 &多进程

    一、线程&进程

    对于操作系统来说,一个任务就是一个进程(Process),比如打开一个浏览器就是启动一个浏览器进程,打开一个记事本就启动了一个记事本进程,打开两个记事本就启动了两个记事本进程,打开一个Word就启动了一个Word进程。进程是很多资源的集合。

    有些进程还不止同时干一件事,比如Word,它可以同时进行打字、拼写检查、打印等事情。在一个进程内部,要同时干多件事,就需要同时运行多个“子任务”,我们把进程内的这些“子任务”称为线程(Thread)。

    由于每个进程至少要干一件事,所以,一个进程至少有一个线程。当然,像Word这种复杂的进程可以有多个线程,多个线程可以同时执行,多线程的执行方式和多进程是一样的,也是由操作系统在多个线程之间快速切换,让每个线程都短暂地交替运行,看起来就像同时执行一样。当然,真正地同时执行多线程需要多核CPU才可能实现。线程是最小的执行单元,而进程由至少一个线程组成。

    我们在做事情的时候,一个人做是比较慢的,如果多个人一起来做的话,就比较快了,程序也是一样的,我们想运行的速度快一点的话,就得使用多进程,或者多线程,在python里面,多线程被很多人诟病,为什么呢,因为Python的解释器使用了GIL的一个叫全局解释器锁,它不能利用多核CPU,只能运行在一个cpu上面,但是你在运行程序的时候,看起来好像还是在一起运行的,是因为操作系统轮流让各个任务交替执行,任务1执行0.01秒,切换到任务2,任务2执行0.01秒,再切换到任务3,执行0.01秒……这样反复执行下去。表面上看,每个任务都是交替执行的,但是,由于CPU的执行速度实在是太快了,我们感觉就像所有任务都在同时执行一样。这个叫做上下文切换。

    二、多线程

    多线程用threading模块

    线程等待

    线程等待,多线程在运行的时候,每个线程都是独立运行的,不受其他的线程干扰,如果想在哪个线程运行完之后,再做其他操作的话,就得等待它完成,那怎么等待呢,使用join、threading.active_count()等待线程结束

    第二种:用while判断子线程是否结束

     电脑CPU有几个核心,就只能同时运行几个任务,比如电脑是四核的,那么就只能同时运行四个任务。

    上下文切换:表面上看,每个任务都是交替执行的,但是,由于CPU的执行速度实在是太快了,我们感觉就像所有任务都在同时执行一样。这个叫做上下文切换

    全局变量锁:python里面的多线程不能利用电脑的多个CPU,只能利用一个CPU,因为python自带的GIL(全局变量锁),限制了python多线程不能在多个CPU核心上运行,就得在一个CPU核心上运行。

    线程锁:线程锁就是,很多线程一起在操作一个数据的时候,可能会导致数据不正确,就要把这个数据加个锁,同一时间只能有一个线程操作这个数据。python3会默认加锁,所以代码里面不加锁也无所谓,但是python2不会自动加锁,就会出现问题。

    守护线程:守护主线程,主线程执行完成之后,子线程立即结束。

  • 相关阅读:
    mysql联合主键,也就是两个数据字段一起做主键的情况
    PHP细节,empty,is_null,isset,if()
    PHP细节,PHP手册中常见的一句话:该函数是二进制安全的
    git和github的学习
    用WPS查看两篇word文档异同之处
    js全角字符转为半角字符
    坑(十七)—— Linux无法挂载NTFS格式的U盘
    subprocess模块
    吴裕雄--天生自然--Go 语言学习笔记--Go 语言数组
    吴裕雄--天生自然--Go 语言学习笔记--Go 语言变量作用域
  • 原文地址:https://www.cnblogs.com/qiaomeiling/p/10297665.html
Copyright © 2011-2022 走看看