使用线程初始化类(Python)的

问题描述:

所以我有这样的代码使用线程初始化类(Python)的

import socket 
def main(): 
    #does a bunch of argument parsing 
while True: 
    newsock, fromaddr = s.accept() 
    ssl_sock = context.wrap_socket(newsock, server_side=True) 
    threading.Thread(target=tls_listener, args=(ssl_sock,)).start() 

def tls_listener(ssl_sock): 
    #the thing I want to turn into a class 
    #calls other functions, does some reporting 



if __name__ == "__main__": 
    main() 

我想使tls_listener一个类(它成长了不少,我已经意识到我应该抽象它(和使用self,而不是传递变量)),但不知道如何使用线程启动类的实例,因为它需要传递一个函数。我是否应该做点像

class TlsListener(threading): 
    #overload run() 

或者是否有可能让线程创建一个TlsListener类的新实例?

假设你想在每次接受一个插座时创建TlsListener类的新实例,你可以简单地离开你的代码原样,并创建一个新的类tls_listener函数中:

while True: 
    newsock, fromaddr = s.accept() 
    ssl_sock = context.wrap_socket(newsock, server_side=True) 
    threading.Thread(target=tls_listener, args=(ssl_sock,)).start() 

def tls_listener(ssl_sock): 
    t = TlsListener() # new instance of TlsListener class 
+0

我可以实际上我不满意这个答案,因为我的声望不到15,但是谢谢你!很简单,优雅的解决方案。 –