Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 线程中的解析_Python_Multithreading_Qt_Qthread_Qtcore - Fatal编程技术网

Python 线程中的解析

Python 线程中的解析,python,multithreading,qt,qthread,qtcore,Python,Multithreading,Qt,Qthread,Qtcore,我有一个主要由QMainWindow组成的程序。但是我添加了一些插件,可以做一些特殊的事情。例如,其中之一解析PirateBay以返回类别的最新种子,并将其放入数据库: def parse(self): bdd = sqlite3.connect("fichiers.sqlite") bdd.row_factory = sqlite3.Row c = bdd.cursor() # obtention d'un curseur c.execute("SELECT

我有一个主要由QMainWindow组成的程序。但是我添加了一些插件,可以做一些特殊的事情。例如,其中之一解析PirateBay以返回类别的最新种子,并将其放入数据库:

def parse(self):
    bdd = sqlite3.connect("fichiers.sqlite")
    bdd.row_factory = sqlite3.Row

    c = bdd.cursor() # obtention d'un curseur
    c.execute("SELECT * FROM pirate ORDER BY id ASC LIMIT 1")

    try:
        last_title = c.fetchone()['title']
        print("Dernier titre: " + last_title)
    except TypeError:
        last_title = ""

    search = self.t.search('*', category=CATEGORIES.VIDEOS.MOVIES)

    go = True
    j = 0
    for i in range(0, 34):
        print(i)
        search.order(ORDERS.UPLOADED.DES).page(i)

        for torrent in search:
            if torrent.title == last_title:
                print("on sort")
                go = False
                break

            print(torrent.title)
            j += 1
            c.execute("INSERT INTO pirate(title, title_simple, user, magnet_link, \
                       url, created, size) VALUES (?, ?, ?, ?, ?, ?, ?)", \
                       (torrent.title, simpleChar(torrent.title), torrent.user, torrent.magnet_link,
                        str(torrent.url), torrent.created, strByteToOctet(torrent.size)[1]))

        if not go:
            break

    print(j)
    bdd.commit()
    c.close()
    bdd.close()

    self.modele.setTable("pirate")
    self.modele.select()
但当我在Qt程序中执行此操作时,程序的其余部分将等待函数完成解析。我使用的API向网站发送请求,因此有时有点长。因此,问题是:


如何在不等待函数结束的情况下进行解析?我希望Qt程序在一个线程中启动它,而不阻塞其余部分。

正如您自己所指出的,使用基于QThread的自定义线程最初需要两件事:

1从QThread继承

2您需要根据模板方法模式重新实现start方法将调用的虚拟受保护运行方法


这几乎就是它的初学者,然后你可以开始你的线程。一旦进一步,您可能需要处理线程池等,但这是以后的事情。在Qt中使用线程很方便。您应该阅读库pyqt或pyside的教程,并尝试自己编写一些东西。如果遇到任何特定问题,应编辑问题并添加详细信息。找到该问题:。我猜不出这么容易。我只需要让我的类从QThread继承并将我的函数parse重命名为run,就这样。