FTP 下载冻结整个应用程序

FTP downloading freezes the whole application

我正在尝试从 FTP 服务器下载一个大约 100 MB 的文件。这是一个测试 .bin 文件,因为我正在测试该应用程序,我想我将来要下载的文件会更重。当我想下载文件时,整个应用程序会冻结,然后在几秒钟后下载文件。该文件是完整的,它下载成功,没有任何错误或类似的东西。唯一的问题是冻结。

我的代码:

ftp = FTP('exampledomain.com')
ftp.login(user='user', passwd='password')

ftp.cwd('/main_directory/')

filename = '100MB.bin'

with open(filename, 'wb') as localfile:
    ftp.retrbinary('RETR ' + filename, localfile.write, 1024)

ftp.quit()
localfile.close()

我尝试在某些代码行之间使用 sleep(),例如在登录和下载文件之间,但它没有帮助,而且 sleep() 似乎根本不起作用使用 FTP.

在另一个线程上下载文件:

import threading
import time
from ftplib import FTP

def download():
    ftp = FTP('exampledomain.com')
    ftp.login(user='user', passwd='password')

    ftp.cwd('/main_directory/')

    filename = '100MB.bin'

    with open(filename, 'wb') as localfile:
        ftp.retrbinary('RETR ' + filename, localfile.write)

    ftp.quit()

print("Starting download...")

thread = threading.Thread(target=download)
thread.start()

print("Download started")

while thread.isAlive():
    print("Still downloading...")
    time.sleep(1)

print("Done")

基于:

关于修改 PyQt 代码的后续问题: