python线程通信方式_Python 线程通信

线程通信

同个进程内的线程之间,由于是在同一个内存空间,所以它们之间的数据可以共享。

import threading

var = 0

def x1():

global var

var = 1

def x2():

print(var)

>>> t1 = threading.Thread(target=x1)

>>> t2 = threading.Thread(target=x2)

>>> t1.start()

>>> t1.join()

>>> t2.start()

# 结果 | x2线程 能获取得到 x1线程 的变量

1

Lock

线程与线程之间的数据虽然能共享,但是不同的线程,相互交错的读写同一个变量,很容易造成数据错落。

Lock机制是一把锁,当一个线程对数据操作完毕之后,别的线程才能对数据进行操作。

import threading

lock = threading.Lock()

n = 0

def run_thread(v):

# 锁

lock.acquire()

global n

n = v

print(n)

# 解锁

lock.release()

# lock.acquire 和 lock.release 之间,线程只能排队操作

>>> t1 = threading.Thread(target=run_thread, args=(5,))

>>> t2 = threading.Thread(target=run_thread, args=(8,))

>>> t1.start()

>>> t2.start()

# 结果

5

8

# 锁也不是完美的解决方案,有时会出现执行错乱,导致锁死,整个进程崩溃

ThreadLocal

ThreadLocal是一个全局的字典,用每个线程的名称做为key去存储和访问变量,这样每个线程之间的数据就变得独立,互相不受到干扰。

import threading

l = threading.local()

def a():

print(l.name)

def b(name):

l.name = name

a()

p1 = threading.Thread(target=b, args=(1,))

p2 = threading.Thread(target=b, args=(2,))

p1.start()

p2.start()

# 结果

1

2

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值