1. 项目文件结构介绍
|—— package
| - __init__.py
| - thread1.py
| - thread2.py
| - 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,也可以正常使用;
from .thread1 import *
from .thread2 import *
from .util import *
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)
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)
import threading
json_data_lock = threading.Lock()
json_data = {"test": "执行function1"}
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)