我如何在课堂上使用多重处理

时间:2019-07-03 01:41:33

标签: python-3.x python-multiprocessing

我正在为学习python编写程序。 这是gui网络爬虫。 我使用QThread成功完成多工作GUI和主类 但我有一个问题。 在主类中,请首先使用WebDriver获取图片地址,然后创建一个名为data的列表。 之后,使用pool()和map()开始使用Main类中的download_image方法下载图片。

我搜索并尝试了许多东西。 imap和lambda等。

这是我的代码 (我将多进程导入为mul) (我的python版本是3.7)

# crawler and downloader class
class Main(QThread, QObject):
    def __init__(self, path, brand, model, grade):
        QThread.__init__(self)
        self.path = path

    # this is download method
    def download_image(self, var):
        a = var.split("/")
        filename = a[-1]
        download_path = self.path + filename
        urllib.request.urlretreieve(var, download_path)

    # this is start method when button clicked in Gui
    def core(self):
        #sample url data list
        data = ['url.com', 'url2.com', 'url3.com', ...]
        download_p = Pool(mul.cpu_count())
        download_p.map(self.download_image, data)
        download_p.close()
        download_p.join()
        print("end")

    def run(self):
        self.core()


class Gui(QMainWindow, design.Ui_MainWindow):
    def __init__(self):
        (and gui code here)

如果我设置了download_p.map(self.download_image,数据) 我收到此错误-> [TypeError:无法腌制主要对象]

如果我设置了download_p.map(self.download_image,self.data) (并设置self.data = [urls ...]) 我得到相同的TypeError

如果我设置了download_p.map(self.download_image,self,data) 我收到此错误-> [TypeError:'Main'对象不可迭代

我也不擅长英语和Python 但是我想解决这个问题,所以我决定在这里问 非常感谢您查看这个新手的问​​题...

0 个答案:

没有答案