加载中…
个人资料
funkygao
funkygao
  • 博客等级:
  • 博客积分:0
  • 博客访问:2,117
  • 关注人气:38
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

python 代码的原子性 atomic

(2011-10-30 23:30:02)
标签:

杂谈

分类: python开发
python的原子性体现在bytecode上一级,它确保只要是一个bytecode,那么它就是原子的

那么,我们看看下面的代码是否是原子的:
def f():
  x = 1
  x += 1

首先,我们要找到该函数的bytecode
http://s12/middle/630c58cbt780d626772fb&690代码的原子性 atomic" TITLE="python 代码的原子性 atomic" />
可以看到,x += 1
并不是atomic
它对应的bytecode是:
LOAD_FAST
LOAD_CONST # 1
INPLACE_ADD
STORE_FAST

由此可见,x += 1,并不是atomic

下面,写个a.py
a = [1, 2]
a.append(3)

然后,看看list.append是否atomic
python -m dis a.py
  1           0 LOAD_CONST               0 (1)
              3 LOAD_CONST               1 (2)
              6 BUILD_LIST               2
              9 STORE_NAME               0 (a)

  2          12 LOAD_NAME                0 (a)
             15 LOAD_ATTR                1 (append)
             18 LOAD_CONST               2 (3)
             21 CALL_FUNCTION            1
             24 POP_TOP             
             25 LOAD_CONST               3 (None)
             28 RETURN_VALUE        
可以看到,append是: 21 CALL_FUNCTION:它是原子的


那么, atomic有什么用?
在多线程环境里,只能保证atomic operation是安全的/不线程交叉的


0

阅读 收藏 喜欢 打印举报/Report
后一篇:pylint的输出
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有