I have a program mainly composed of a QMainWindow. But I added some kind of "plugins", which do some particular things. One of them for example parses thepiratebay to return the latest torrents of a category and put them in a database:
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()
But when I do that in my Qt program, the rest of the program waits until the function finishes the parsing. The API I use sends requests to the website, so it is sometimes a bit long. So the question is:
How do I parse without waiting the end of this function? I would like the Qt program to start that in a thread, without blocking the rest.