ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

服务器远程辅助下载文件

2020-03-09 16:01:43  阅读:299  来源: 互联网

标签:tmp 辅助 url self port content download 服务器 远程


最近在做深度学习发现下载模型时速度太慢,可能是外网的原因。所以做了一个小插件,利用远程服务器辅助下载文件。

你需要准备:
远程服务器(具备TCP接口)、本地电脑(python环境)
所需知识:
1、PYQT基础知识
2、TCP知识
3、QT多线程知识

PYQT做界面 & 多线程

如果你对PYQT不太了解,参考可以五分钟掌握。

如图所示,我们搭建了我们的UI界面,主要三个部分:端口号,下载链接,日志。
在这里插入图片描述
代码可以参考:

class Example(QWidget):

    def __init__(self):
        super().__init__()
        self.ok = False
        self.port_default = 0
        self.content_tmp = ''
        self.initUI()
    #UI界面涉及
    def initUI(self):
        #1 说明内容
        self.lbl2 = QLabel(self)
        self.lbl2.setText(
            "1、You should input Port first.\n2、Enter the URL and click the download button\n3、If you have some problem, send email to\n menglingjun@cloudcver.com")
        self.lbl2.move(30, 10)
        #2 下载区
        #2.1 文本URL
        self.lbl = QLabel(self)
        self.lbl.setText("Url:")
        self.lbl.move(30, 93)
        #2.2 链接URL
        self.file_url = QLineEdit(self)
        self.file_url.move(50, 90)
        self.file_url.setGeometry(50, 90, 250, 23)
        #2.3 下载按钮
        download_button = QPushButton('Download', self)
        download_button.clicked.connect(self.download)
        download_button.move(320, 90)
        #3 端口号按钮
        self.download_button = QPushButton('No Port', self)
        self.download_button.clicked.connect(self.login)
        self.download_button.move(400, 10)
        #4 日志
        self.tmp = QTextEdit(self)
        self.tmp.move(50, 120)
        self.tmp.setGeometry(50, 120, 350, 70)

        #5 标题
        self.setGeometry(300, 300, 500, 200)
        self.setWindowTitle('服务器加速下载器@cloudcver')
        self.show()
    def login(self):
        text, ok = QInputDialog.getText(self, 'Set Port',
                                        'Enter your port:')
        if ok:
            self.port_default = int(text)
            self.download_button.setText(text)
            self.content_tmp = self.content_tmp + "%s:Set port at %s\n"%(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()),text)
            self.tmp.setText(self.content_tmp)
            self.ok = True
    def download(self):
        if self.ok:
            self.content_tmp = self.content_tmp + "%s:Send the task to server\n" % (
                time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
            self.tmp.setText(self.content_tmp)
            self.thread = DownloadThread()
            self.thread.set_port_url(self.port_default,self.file_url.text())  # 创建
            self.thread.trigger.connect(self.finish)  # 连接信号
            self.thread.start()  # 开始线程
        else:
            reply = QMessageBox.question(self, 'Message',
                                         "You should set port first", QMessageBox.Yes)
    def finish(self):
        self.content_tmp = self.content_tmp + "%s:Finish!\n" % (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
        self.tmp.setText(self.content_tmp)

界面很简单就不说了,主要说一下多线程内容!
重点看一下这里!
重点看一下这里!
重点看一下这里!

1、看download函数,ok这个参数代表已经设定好端口号。初始ok是False,在Port按钮输入后就变为True了。
2、这里我们启动了一个多线程DownloadThread(),其定义了一个线程类,这个类下面有几个方法:
2.1 set_port_url()是我们自己定义的方法,为了设定一些参数。
2.2 run是一个父类的函数,我们需要重构一下,这就是当执行线程时需要执行的函数。也就是self.thread.start() 后就开始执行run这个函数。
2.3 trigger是我们创建的一个pyqt信号,我们可以让它连接一个函数,然后在run执行完后传递退出的信号,代表推出后执行它连接的函数。
具体的代码可以看:

class DownloadThread(QThread):
    trigger = pyqtSignal()

    def __int__(self):
        super(DownloadThread, self).__init__()
    def set_port_url(self,port_default,url):
        self.port_default = port_default
        self.url = url
    def run(self):
		##一会补充!
        # # 循环完毕后发出信号
        # print('1线程运行完了')
        self.trigger.emit()

TCP服务

标签:tmp,辅助,url,self,port,content,download,服务器,远程
来源: https://blog.csdn.net/CLOUD_J/article/details/104752716

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有