我有一个使用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 :(得分:2)
根据documentation,close_all
应该“停止投放...”,因此serve_forever
应该返回。
将您的ftpd
对象存储在全局变量中(目前它是main
的本地变量),您可以从主线程调用close
或close_all
。
根据您的评论,步骤如下:
ftpd = ftpserver.FTPServer(address, handler)
引用global variable ftpd.close_all()