===总结 ============================================
我使用 QNetworkAccessManager 和 QNetworkRequests 同时下载两个图像。我如何确定两次下载已完成?
=== 详细说明 ================================
我有两个图像的 URL,我想异步下载它们。为此,我初始化 QNetworkAccessManager 并使用两个 QNetworkRequest。完成后,每个请求都会将图像的内容写入文件。
问题是两个请求彼此都不知道,因此无法验证另一个请求是否完成。
你能告诉我如何等待这两个请求完成吗?
这是完整的代码:
import sys
from PyQt5.QtCore import QUrl, QFile, QIODevice
from PyQt5.QtNetwork import QNetworkAccessManager, QNetworkRequest
from PyQt5.QtWidgets import QApplication, QWidget
class MainWindow(QWidget):
def __init__(self):
super(MainWindow, self).__init__()
img_url1 = "https://somesite.com/image1.jpg"
img_url2 = "https://somesite.com/image2.jpg"
self.downloader = QNetworkAccessManager()
self.requests = []
self.temp_files = []
for index, mediafile_url in enumerate([img_url1, img_url2]):
self.requests.append(self.downloader.get(QNetworkRequest(QUrl(mediafile_url))))
request = self.requests[index]
self.temp_files.append(QFile(f'{mediafile_url.split("/")[-1]}'))
temp_file = self.temp_files[index]
request.finished.connect(lambda *args, r=request, tf=temp_file: self.download_image(r, tf))
self.show()
@staticmethod
def download_image(request, temp_file):
image_data = request.readAll()
temp_file.open(QIODevice.WriteOnly)
temp_file.write(image_data)
temp_file.close()
app = QApplication(sys.argv)
window = MainWindow()
app.exec_()