1
我有一個程序主要由一個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),並嘗試自己寫一些東西。如果遇到任何特定問題,則應編輯添加問題的問題。 –
發現它:http://stackoverflow.com/questions/6783194/background-thread-with-qthread-in-pyqt。我猜不出這很容易。我只需要讓我的類從QThread繼承,並將我的函數解析重命名爲run,就是這樣。 – Rififi