因为业务需求要将抓到的数据进行累加统计,而且还要间隔三秒钟将这个数据推送到服务端,所以就要实现一个全局变量来记录这个数据,而且推送服务要每隔三秒钟就推送一次到服务端。之前使用了一个全局文件common.py,里面存储这个变量total,然后一个设置total=1000,另一个读total,但是发现读不到修改后的值,不知道问题出在哪里。后来将这个变量设置为一个全局对象的属性,然后再修改这个属性,然后另一个文件中读取这个属性,就好了
基本的目录结构:
common.py用来存储全局变量的:
- class Global:
- total = 0
- name = ""
first.py是用来修改全局变量的:
- import threading
- import time
- from src.common import Global
-
-
- def add_count():
- while True:
- Global.total += 1
- print(f"add_count开始设置: {Global.total}\n")
- time.sleep(3)
-
-
- def run():
- print("first run")
- t = threading.Thread(target=add_count)
- t.start()
-
-
- if __name__ == '__main__':
- run()
second.py是用来读取这个变量的:
- import threading
- import time
- from src.common import Global
-
-
- def read_count():
- while True:
- print(f"read_count全局变量是:{Global.total}\n")
- time.sleep(3)
-
-
- def run():
- print("first run")
- t = threading.Thread(target=add_count)
- t.start()
-
-
- if __name__ == '__main__':
- run()
最后还需要一个main.py,这个是主程序入口,不能单独运行first.py和second.py,因为那样的话, 相当于两个进程,这个并不是两个进程间通讯,所以要保证这两个程序运行在同一进程中,所以就需要使用统一的入口来管理:main.py
- import threading
- from src.first import add_count
- from src.second import read_count
-
-
- def main():
- print("运行主程序")
- t1 = threading.Thread(target=add_count)
- t2 = threading.Thread(target=read_count)
- t1.start()
- t2.start()
-
-
- if __name__ == '__main__':
- main()
最终实现的效果: