如何从主线程突然杀死一个线程?

时间:2012-08-15 11:52:49

标签: python multithreading ftplib

我有一个使用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

请帮助家伙

1 个答案:

答案 0 :(得分:2)

根据documentationclose_all应该“停止投放...”,因此serve_forever应该返回。

将您的ftpd对象存储在全局变量中(目前它是main的本地变量),您可以从主线程调用closeclose_all


根据您的评论,步骤如下:

  1. make ftpd = ftpserver.FTPServer(address, handler)引用global variable
  2. 如果要停止提供ftp连接,请致电ftpd.close_all()