从操作实例“UI界面实现SSH登录服务器并执行命令监控”中学习到的线程与线程间参数传递方法记录
从操作实例“UI界面实现SSH登录服务器并执行命令监控”中学习到的线程与线程间参数传递方法记录;
https://www.cnblogs.com/babashi9527/p/16594881.html
参照此代码中的实例,线程主要以启用线程传递函数方式运行对应的执行内容,而线程间的参数传递依托于队列方式实现;
1、多线程
使用模块threading中的Thread
代码示例:
#首先确保模块已导入 from threading import Thread #实例化线程 ''' 参数含义: target 绑定线程函数, args 元组 给线程函数位置传参, kwargs #字典 给线程函数键值传参 ''' td = Thread(target=ServerMonitor,args=(abd,)) #设置主线程和分支线程退出分支线程也退出.要在start前设置 通常不和join 一起使用 td.setDaemon(1) #启动线程 td.start()
#定义执行函数
def ServerMonitor(abd):
print(abd)
2、队列
使用系统自带的queue模块
代码示例:
#确保已导入模块 import queue #调用queue模块中的Queue函数定义队列,并配置队列长度 QueueInfo = queue.Queue(100000) #使用put方法将数据压入队列尾部 QueueInfo.put(back_normal_info) #使用get方法取队列头部值 AnswerInfo = QueueInfo.get()
3、以参数形式传递py文件中的类,以供函数引用所传递的py文件类中的变量或者方法
#注意此处定义的类,稍后以self,作为参数传递给其他py文件 class MainFrameUI(wx.Frame): def __init__(self,parent): #起线程开始任务 td = Thread(target=self.ServerMonitor) td.setDaemon(1) td.start() #把所属的类传递,以self作为参数传递给目标函数(目标函数会传递给另外一个彭以文件) def ServerMonitor(self): #@author: 9527 Load_list1 = self.Info_List2 #实例化Remote_management_WayKind类 self.Ssh_load = MESRM.Remote_management_WayKind() if self.action_or_stop == True: for Load_list in Load_list1: td = Thread(target=self.Use_Monitor, args=(self, Load_list)) td.setDaemon(1) td.start() else: self.log_info1.AppendText('连接失败请重试\n') pass #这里的parent是上面线程传递的self,将会传递给调用的另外一个py文件的Command_Way方法里面;注意在此方法中也需要定义参数,以便接受参数传入; def Use_Monitor(self, parent, Load_list): #调用MESRM.Remote_management_WayKind的Command_Way方法 #传参parent为self是启用进程的MainFrameUI本身,Load_List为登陆了认证信息 print("调用进程已启用: ", Load_list) self.Ssh_load.Command_Way(parent,Load_list)

浙公网安备 33010602011771号