2012-08-15 188 views
1

我有一個使用serve_forever命令的ftp服務器。這個ftp服務是在一個線程中調用的,我想要做的是當我點擊我的GUI上的停止按鈕時,我想突然關閉主線程中的線程。如何從主線程突然殺死一個線程?

import os 
import sqlite3 
from pyftpdlib import ftpserver 
def main(): 
    authorizer = ftpserver.DummyAuthorizer() 
    #does something 
    address = ('127.0.0.1', 10221) 
    ftpd = ftpserver.FTPServer(address, handler) 

    # start ftp server 
    ftpd.serve_forever() 
if __name__ == '__main__': 
    main() 

這是我這就要求FTP服務

def start_ftp(self): 
    self.ftp_status.setText("Running") 
    self.ftp_status.setStyleSheet("Background : light green") 
    #thread.start_new_thread(FtpService) 

def stop_ftp(self): 
    self.ftp_status.setText("Stopped") 
    self.ftp_status.setStyleSheet("Background : red") 
    #what should i put here for the desired result 

請幫傢伙

+0

可你只是店' ftpd'在某處公開可見(即在全局中)並從主線程調用'close'或'close_all'? – Useless 2012-08-15 11:57:36

+0

@Useless:thanx爲快速響應,你會友好地舉例說明如何執行上面給出的答案 – TheCreator232 2012-08-15 12:07:36

+2

你不想突然關閉一個線程。你想停止你的FTP服務。思考工作而不是執行工具是編寫明智的多線程代碼的第一步。 – 2012-08-15 12:22:26

回答

2

按照documentation主線程,close_all應該 「停止服務......」,所以serve_forever應該返回。

Store中ftpd對象在一個全局變量(目前是本地main),你可以調用從主線程closeclose_all


根據您的意見,步驟是:

  1. 使ftpd = ftpserver.FTPServer(address, handler)global variable
  2. 通話ftpd.close_all()時要停止服務FTP連接
+0

thanx的多線程編程中尋求幫助,你的解決方案就能解決。 – TheCreator232 2012-08-15 16:21:27