python多线程间的数据简单调用

作为一个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))

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

来自星星的死心眼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值