【发布时间】: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