前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >第一天内容

第一天内容

作者头像
小闫同学啊
发布2019-07-18 09:54:38
3570
发布2019-07-18 09:54:38
举报
文章被收录于专栏:小闫笔记小闫笔记

今天学习内容为GIL锁,深浅拷贝,模块导入以及with

GIL锁:

需要记忆的是如下几点:

  1. 是全局解释器锁Global Interpreter Lock
  2. 是解释器层面的锁(以前认识的线程互斥锁是代码层面的)
  3. 只在cpython中存在这个问题
  4. 解决的问题是共享变量的资源竞争问题
  5. 不适合计算密集型程序,因为同一时刻只有一个线程在执行
  6. 解决这一问题的办法:利用进程或者协程来代替线程。

为什么可以利用进程和协程来解决:

1.多进程中创建的子进程会将主进程中所有的资源数据拷贝一份,包括GIL锁,每个进程中只有一个主线程,那么就不会存在线程之间的资源竞争问题了。

2.协程是在线程内部进行的,所以也不存在抢锁的问题

深浅拷贝:

概念层面:

  1. 浅拷贝:浅拷贝只是拷贝了顶层数据,只拷贝了第一层的引用。如果说元素是可变对象,并且被改变了,那么拷贝的对象也发生变化
  2. 深拷贝:深拷贝是逐层进行拷贝,直到所有的引用都是不可变对象为止。如果元素有可变对象,并且被改变了,拷贝的对象是不会发生变化的。数据具备独立性。

不论是深浅拷贝,对于不可变对象,都相当于引用赋值

使用层面:

  1. 浅拷贝有四种方式: copy模块的copy方法, l2 = copy.copy(l1) 对象的copy方法, l2 = l1.copy() 工厂方法, l2 = list(l1) 工厂方法 切片(只是列表支持) l2 = l1[1:]
  2. 深拷贝是deepcopy

效果层面:

浅拷贝的优势:花费时间少,花费的内存少,效率高,在工作中常用的都是浅拷贝,程序默认的也是浅拷贝,除非有特殊要求,否则不要使用深拷贝。

模块导入路径:

我们在导入模块,电脑是从哪里找这个模块呢?有一个顺序:

  1. 当前程序所在目录
  2. 当前程序根目录
  3. PYTHONPATH
  4. 标准库目录
  5. 第三方目录site-packages目录

动态加载模块:

有一个前提:就是在程序没有结束的时候

两种方式:

  1. from imp import reload # 删除线说明imp模块在新解释器版本中,被废弃了,不建议使用了
  2. from importlib import reload # 解释器提供了一个新的模块importlib实现动态加载模块
  3. reload(改变后的模块)

利用reload方法

模块导入方式的区别:

from-import 会有命名冲突的问题

from-import方式在导入时,它相当于将目标模块中的成员复制了一份到本地

相当于深拷贝

被导入模块中的需要的数据被拷贝了一份放在当前文件中

用的时候,不用写对象名了

想访问私有方法需要使用__all__

improt

import 方式保存的是模块的引用

相当于浅拷贝,只是拷贝了模块的一个引用

相当于将一个模块中所有的内容都导入到当前文件中使用

导入了私有方法,我们可以使用

循环导入的问题:

循环导入是一种逻辑错误。

sys.modules是系统加载的全部模块,是一个字典

出现问题的原因:a导入了b模块,开始没有b模块,在创建b完空模块后,对模块会进行初始化(就是对模块从头到尾的扫描一遍),发现第一行是导入a模块,会去创建a的空模块然后再初始化a,发现a模块第一行是导入b模块,那么又去查看b此时,已经有b模块了,但是是空模块,所以调用出错。

解决办法:重构代码

with:

with的作用其实就是简化代码,方便我们操作。

with在进行文件的读写操作的时候会自动的进行文件的关闭,在进行线程的互斥锁的申请时,会在使用完进行关闭。原因就是上下文管理器中的两个魔法方法。

contextmanager上下文管理器中的__enter____exit__

__enter__用来做创建对象和初始化工作

__exit__用来文件关闭,数据库关闭,资源回收

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-11-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 全栈技术精选 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档