2015-06-19 71 views
1

所以我有這樣的代碼使用線程初始化類(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類的新實例?

回答

1

假設你想在每次接受一個插座時創建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,但是謝謝你!很簡單,優雅的解決方案。 –