从操作实例“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)

 

posted @ 2022-08-18 17:25  No九五二七9527  阅读(69)  评论(0)    收藏  举报