美文网首页
Python线程安全

Python线程安全

作者: 小幸运Q | 来源:发表于2020-09-04 22:27 被阅读0次

  • 因为python的GIL锁,queue这种结构体是线程安全的,因为它执行的是原子性操作
import threading
 
n = [0]
 
def foo():
    n[0] = n[0] + 1
    n[0] = n[0] + 1
 
threads = []
for i in range(5000):
    t = threading.Thread(target=foo)
    threads.append(t)
 
for t in threads:
    t.start()
 
print(n)

大部分结果:[10000]。但其中出现了[9998]结果

这段代码并不是线程安全的,有些线程加1还没保存时候,它的这个结果被其他线程给覆盖了。

原子性操作线程安全,非原子性操作线程安全。

import dis
def update_list(L):
    L[0] = 1     # 原子操作!不用担心线程安全问题
dis.dis(update_list)
 
# STORE_SUBSCR 赋值为1操作只有一次字节码操作,单字节码操作
"""
  4           0 LOAD_CONST               1 (1)
              2 LOAD_FAST                0 (L)
              4 LOAD_CONST               2 (0)
              6 STORE_SUBSCR                # 单字节码操作,线程安全
              8 LOAD_CONST               0 (None)
             10 RETURN_VALUE
"""
import dis
def incr_list(L1):
    L1[0] += 1   # 危险!!!不是原操作
dis.dis(incr_list)
 
# 需要多个字节码操作如BINARY_SUBSCR、INPLACE_ADD,
# 有可能在线程执行过程中切到其它线程
'''
 19           0 LOAD_FAST                0 (L1)
              2 LOAD_CONST               1 (0)
              4 DUP_TOP_TWO            
              6 BINARY_SUBSCR
              8 LOAD_CONST               2 (1)
             10 INPLACE_ADD
             12 ROT_THREE
             14 STORE_SUBSCR
             16 LOAD_CONST               0 (None)
             18 RETURN_VALUE
'''

相关文章

  • GIL线程全局锁

    线程全局锁(Global Interpreter Lock),即Python为了保证线程安全而采取的独立线程运行的...

  • python : valueerror: unknown el

    matplotlib 是进程安全的,不是线程安全的。应该使用python的multiprocessing.Pool...

  • Python线程安全

    原子性判断 在《关于Python GIL》里提到,默认情况下每隔100个tick强制释放一次GIL,相对于具体业务...

  • Python线程安全

    因为python的GIL锁,queue这种结构体是线程安全的,因为它执行的是原子性操作 大部分结果:[10000]...

  • python之多线程与多进程入门

    python之多线程与多进程 关键词: GIL锁,IO繁忙,线程安全,线程同步,进程池,进程通信,队列 GIL锁;...

  • 线程优先级队列

    Queue模块可以用来进行线程间的通信,让各个线程之间共享数据Python的Queue模块提供了同步、线程安全的队...

  • 每周一个 Python 模块 | Queue

    专栏地址:每周一个 Python 模块 Queue 是 Python 标准库中的线程安全的队列(FIFO)实现,提...

  • python爬虫-25-python多线程安全队列Queue详解

    1、python之Queue介绍 Python中的queue模块中提供了同步的、线程安全的队列类,包括FIFO(先...

  • Python的100天打卡(下)

    7.10 1.多线程 程序需要维护许多共享的状态(尤其是可变状态),Python中的列表、字典、集合都是线程安全的...

  • 11-9 多线程和多进程

    Python的GIL是针对进程还是线程?  是线程 Python多核cpu可以运行多线程吗? Python线程执行...

网友评论

      本文标题:Python线程安全

      本文链接:https://www.haomeiwen.com/subject/bovtektx.html