【问题标题】:Parsing in a thread在线程中解析
【发布时间】:2013-12-23 11:21:22
【问题描述】:

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

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 程序在线程中启动它,而不阻塞其余部分。

【问题讨论】:

  • 在 Qt 中使用线程很方便。您应该阅读您的库(pyqt 或 pyside)的教程并尝试自己编写一些东西。如果您遇到任何特定问题,您应该编辑问题添加详细信息。
  • 找到它:stackoverflow.com/questions/6783194/…。我想不到这很容易。我只需要让我的类继承自 QThread 并将我的函数解析重命名为运行,就是这样。

标签: python multithreading qt qthread qtcore


【解决方案1】:

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

1) 继承自QThread

2) 你需要重新实现start方法将基于模板方法模式调用的虚拟保护run方法。

对于初学者来说差不多就是这样,然后你就可以开始你的线程了。有一次,你走得更远,你可能需要处理线程池等等,但那是以后的事了。strong text

【讨论】:

    猜你喜欢
    • 2014-09-26
    • 1970-01-01
    • 2013-04-19
    • 1970-01-01
    • 2016-02-23
    • 2017-11-19
    • 2012-05-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多