需求
2个采集线程, 1个展示线程, 这个展示线程如何接收2个采集线程的数据,分开存储,分开显示
给个示范代码, 采集线程 1秒发一次数据, 展示线程 10秒展示一次数据。
from threading import Thread
from time import sleep
from random import randint
from pubsub import pub
import time
import pymysql
class Thread1(Thread):
def __init__(self):
"""Init Worker Thread Class."""
Thread.__init__(self)
print('采集线程1 Start ')
def run(self):
"""Run Worker Thread."""
i = 0
while True:
i += 1
pub.sendMessage('setval', status_val=['t1',randint(1,100)])
sleep(1)
class Thread2(Thread):
def __init__(self):
"""Init Worker Thread Class."""
Thread.__init__(self)
print('采集线程1 Start ')
def run(self):
"""Run Worker Thread."""
i = 0
while True:
i += 1
pub.sendMessage('setval', status_val=['t2',randint(200,500)])
sleep(1)
class Thread_fx(Thread):
def __init__(self):
Thread.__init__(self)
print('分析线程 Start ')
self.data = []
self.data_dict = {}
self.data_stand_dict = {}
self.stand = 0
pub.subscribe(self.change_status, 'setval')
def change_status(self, status_val):
item = status_val
if item[0] in self.data_dict:
temp = self.data_dict[item[0]]
temp.append(item[1])
else:
self.data_dict[item[0]] = [item[1]]
self.data.append(status_val)
def run(self):
while True:
for k,v in self.data_dict.items():
print("线程",k,"有{}条数据,最后一条:".format(len(v)),v[-1])
sleep(10)
def test():
print('start test')
t1 = Thread1()
t1.start()
t2 = Thread2()
t2.start()
fx = Thread_fx()
fx.start()
if __name__ == '__main__':
test()