编程语言-python

1 python 生成器

python 生成器是一个返回可以迭代对象的函数,可以被用做控制循环的迭代行为。生成器类似于返回值为数组,这个函数可以接受参数,可以被调用,一般的函数会返回包括所有数值的数组。生成器一次只能返回一个值,这样消耗的内存将会大大减小。

2 python 中is 和== 的区别

is 是用来判断两个变量引用的对象是否为同一个。== 用于判断引用对象的值是否相等,可以通过id() 函数查看引用对象的地址。

3 python 方法解析顺序

python 的方法解析顺序优先级从高带低为实例本身,类继承类(继承关系越近,越先定义,优先级越高)

Ctrl +c 会挂掉程序

通过is 可以判断两个dict 是否相同

list.pop(0) 删除list 第一个元素

join() 函数进行字符串拼接

5 pytorch 中cuda() 作用,两个tensor ,一个加了cuda() 。一个没加,相加后会怎样?

cuda() 将操作对象放在GPU内存中加入cuda() 的tensor 放在GPU 内存中,所以这两个Tensor 相加会报错。

6 python 中dict 和list 的区别,dict 的内部实现

dict 查找速度快,占用的内存大,list 查找速度慢,占用的内存小,dict 不能用来存储有序集合,dict 用{} 表示,list 用【】表示。

dict 是通过hash 表实现的,dict 为一个数组,数组的索引键是通过hash 函数后处理后得到的,hash 函数的目的是使键值均匀的分布在数组中。

 7 python 多进程

方式一: os.fork()

方式二:使用multiprocessing 模块: 创建Process 实例,传入任务执行函数作为参数

方式三:使用multiprocessing 模块:派生Process 的子类,重写run 方法。

方式四: 使用进程池Pool

8 python 锁

python 中各种锁:

(1)全局解释器锁

1.1 什么是全局解释器锁

每个GPU 在同一时间只能执行一个线程,那么其他的线程就必须等待该线程的全局解释器,使用权消失后才能使用全局解释器,即使多个线程直接不会相互影响在同一个进程下也只有一个线程使用CPU,这样的机制称为全局解释器锁(GIL)。GIL 的设计简化了Cpython 的实现,使的对象模型包括关键的内建类型,如字典等都是隐含的,可以并发访问的,锁住全局解释器使得比较容易的实现对多线程的支持,但也损失了多处理器主机的并行计算能力。

1.2 全局解释器锁的好处

1) 避免了大量的加锁解锁的好处

2) 使数据更加安全,解决多线程间的数据完整性和状态同步

1.3 全局解释器的缺点

多核处理器退化成单核处理器 ,只能并发不能并行

1.4 GIL 的作用:

多线程情况下必须存在资源的竞争,GIL 是为了保证在解释器级别的线程唯一使用共享资源

(2) 同步锁

2.1 什么是同步锁?

同一时刻的一个进程下的一个线程只能使用一个CPU。要确保这个线程下的程序在一段时间被CPU 执行,那么就要用到同步锁

2.2 为什么用同步锁?

因为有可能当一个线程在使用CPU 时,该线程下的程序可能会遇到io 操作,那么CPU 就会切到别的线程上去,这样就有可能会影响到该线程结果的完整性。

2.3 怎么使用同步锁?

只需要在对公共数据的操作前后加上上锁和释放锁的操作即可。

2.4 同步锁的所用?

为了保证解释器级别下的自己编写的程序唯一使用共享资源产生了同步锁。

(3)死锁

3.1  什么是死锁?

指两个或两个以上的线程或进程在执行程序的过程中,因争夺资源或者程序推进顺序不当而相互等待的一个现象。

3.2 死锁产生的必要条件?

互斥条件,请求和保持条件,不剥夺条件,环路等待条件

3.3 处理死锁的基本方法?

预防死锁,避免死锁(银行卡算法),检测死锁(资源分配),解除死锁,剥夺资源,撤销进程

(4)什么是递归锁

在python 中为了支持同一个线程中多次请求同一资源,python 提供了可重入锁,这个RLock 内部维护着一个Lock 和一个counter 变量,counter 记录了acquire的次数,从而使得资源可以被多次require 。直到一个线程所有的acquire 都被release。其他的线程才能获得资源,递归锁分为可递归锁与非递归锁。

(5)假设不会发生并发冲突,只在提交操作时检查是否违法数据完整性

(6)什么是悲观锁?

假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作

(7)python 常用的加锁方式?

互斥锁,可重入锁,迭代死锁,相互调用死锁,自旋锁。

 

 

 

 


 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值