python: 线程之间共享变量的使用(数据交互)

1. 项目文件结构介绍

|—— package
|      - __init__.py
|      - thread1.py  # 存放线程1 
|      - thread2.py  # 存放线程2 
|	   - util.py     # 存放线程间共享变量 
|—— mian.py # 程序入口,即主线程

2. 文件代码内容详解

  • init.py ——为package包的对外接口
  • thread1.py —— 存放线程1的内容,当json_data[“test”] 等于"执行function2"的时候,修改json_data[“test”]的值为"执行function1",然后等待3秒,模拟功能执行,再进入下一次循环;
  • thread2.py —— 存放线程2的内容,当json_data[“test”] 等于"执行function1"的时候,修改json_data[“test”]的值为"执行function2",然后等待3秒,模拟功能执行,再进入下一次循环;
  • util.py —— 用来存线程间的共享变量json_data和该变量的线程锁。备注:共享变量修改的时候一定要用线程锁,不然就会出现好几个线程修改共享变量的情况;程序的结果就会走向未知
  • main.py —— 程序入口,启动其他线程,然后每当共享变量的值发生改变的时候,打印共享变量的值。
  • 总结:整个程序中主线程负责在共享变量发生改变时,打印它的值;两个子线程负责在满足各自条件的情况下修改共享变量的值;
  • 备注:
    • 线程锁里面的代码执行时会阻塞整个程序的所有其他线程,所以在里面如果要加延时的话,要慎重;
    • 共享变量也可以替换成一个队列queen,也可以正常使用;

# __init__.py  
from .thread1 import *
from .thread2 import *
from .util import *



# thread1.py       
from .util import *
import time
def thread_function1():
    while True:
        if json_data["test"] == "执行function2":
            with json_data_lock: # 线程锁
                json_data["test"] = "执行function1"
        	time.sleep(3)



# thread2.py
from .util import *
import time
def thread_function2():
    while True:
        if json_data["test"] == "执行function1":
            with json_data_lock: # 线程锁
                json_data["test"] = "执行function2"
        	time.sleep(3)



# util.py
import threading
json_data_lock = threading.Lock()
json_data = {"test": "执行function1"}




# main.py
from A import *

if __name__ == '__main__':
    t1 = threading.Thread(target=thread_function1)
    t2 = threading.Thread(target=thread_function2)
    t1.start()
    t2.start()
    data = ""
    while True:
        if data != json_data["test"]:
            data = json_data["test"]
            with json_data_lock: # 线程锁
                print(json_data)
  • 19
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值