作为一个python菜鸟,最近在利用python写个多线程项目的时候,遇见了线程之间的数据调用的问题。遂提供一个简单的调用dome与大家分享一下,若有更好的数据调用方式欢迎留言。
本文涉及的知识点是:python多线程/python项目文件之间的类的引用/python多线程之间的变量调用
本人不喜欢一上来就定义一大堆全局变量,因此经常通过调用类属性的方法来实现多个文本之间变量共享。这么做的问题就在于,项目复杂度提升以后,我就再也找不见某些变量了,俗称埋藏了无数只bug。
痛定思痛后,决定在类的内部,设计两个变量,一个用来给外部函数调用(self.send),一个用来接收外部函数给的数据(self.send),其实都是外部函数调用啦,毕竟类的内部只要self就可以引用了。
主线程(test1.py)中开启两个线程,这两个线程分别运行不同文件(test2.py/test3.py)下的两个类。
代码可以直接跑,在pycharm中新建一个python项目,复制粘贴这三段代码,然后run test1就可以了。
test1.py
"""
这段代码只是开启两个线程,在项目设计过程中,主线程还可以做其他的任务。
"""
import threading
import test2
import test3
if __name__ == '__main__':
te = test2.test2()
ts = test3.test3()
threading.Thread(target=te.main_func).start()
threading.Thread(target=ts.func,args=(te,)).start()
test2.py
"""这个段代码就单纯定义一个类,以及成员函数"""
class test2():
def __init__(self):
self.send =0
self.reci = 0
def send_func(self):
#每调用一次就+1
self.send += 1
return self.send
def reci_func(self,data):
#接收另一个线程返回的值
self.reci = data
print("jj="+str(self.reci))
def main_func(self):
# 不断判断self.send的值
while 1:
if self.send == 10:
self.send = 0 # 归零操作
test3.py
"""
在本文的情景下,这段代码才是核心线程,在主线程中调用本段函数的func()
来实现变量值的变化
"""
import time
class test3():
def __init__(self):
self.send =0
self.reci = 0
def func(self,t2):
"""
t2是传入的test2实例化的对象,在这个函数里面,通过调用
test2自身的函数来修改test2的成员变量
"""
while 1:
time.sleep(1)
self.reci = t2.send_func() *2
t2.reci_func(self.reci)
self.out_func() #test3的输入函数
def out_func(self):
if self.reci >=10:
print("test3.reci = " + str(self.reci))