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