Added the use of multithreading

This commit is contained in:
2024-03-22 21:52:54 -04:00
parent 13f7bf6f07
commit 095f7cc295
2 changed files with 61 additions and 17 deletions

75
gui.py
View File

@ -44,6 +44,20 @@ if len(model_names) == 0:
print("No tesseract models found at", MODELS_PATH, "!", file=sys.stderr)
sys.exit(0)
class UPCWorker(QObject):
finished = pyqtSignal()
update_name = pyqtSignal(list)
def __init__(self, upcList):
super().__init__()
self.upcList = upcList
def get_items_name(self):
for upc in self.upcList:
name = get_name_from_upc(upc[1])
self.update_name.emit([upc[0], name])
self.finished.emit()
class coin_app(QtWidgets.QMainWindow):
def __init__(self):
QtWidgets.QMainWindow.__init__(self)
@ -70,6 +84,45 @@ class coin_app(QtWidgets.QMainWindow):
self.items = None
self.upcCheckTimer = QTimer(self)
self.upcCheckTimer.timeout.connect(self.pushUPCToThread)
self.upcCheckTimer.start(1500)
print("Initialized timer!")
self.upcThread = QThread()
self.upcWorker = None
self.upcCheckList = []
def pushUPCToThread(self):
if len(self.upcCheckList) > 0 and self.upcWorker is None:
self.upcWorker = UPCWorker(self.upcCheckList)
self.upcWorker.moveToThread(self.upcThread)
self.upcWorker.update_name.connect(self.updateItemName)
self.upcWorker.finished.connect(self.collectUPCWorker)
self.upcThread.finished.connect(self.collectUPCThread)
self.upcThread.started.connect(self.upcWorker.get_items_name)
self.upcThread.start()
print("Lookup thread started!")
self.upcCheckList = []
def collectUPCWorker(self):
self.upcWorker.deleteLater()
self.upcWorker = None
def collectUPCThread(self):
self.upcThread.deleteLater()
def updateItemName(self, name):
itemName = QStandardItem(name[1])
itemName.setTextAlignment(Qt.AlignmentFlag.AlignCenter)
self.items.setItem(name[0], TABLE_COL_NAME, itemName)
self.itemsTable.resizeColumnToContents(TABLE_COL_NAME)
self.itemsTable.resizeRowToContents(name[0])
def update_now(self, value):
self.model = value
print("Model selected as:", self.model)
@ -177,29 +230,19 @@ class coin_app(QtWidgets.QMainWindow):
button = self.sender()
row = self.itemsTable.indexAt(button.pos()).row()
upc = self.items.item(row, TABLE_COL_UPC).text()
self.upcCheckList.append([row, upc])
print("Started getting name of UPC:", upc)
name = get_name_from_upc(upc, max_tries=3)
print("Got name", name, "from UPC:", upc)
item = QStandardItem(name)
item.setTextAlignment(Qt.AlignmentFlag.AlignCenter)
self.items.setItem(row, TABLE_COL_NAME, item)
self.itemsTable.resizeColumnToContents(TABLE_COL_NAME)
self.itemsTable.resizeRowToContents(row)
self.statusBar().showMessage("Started getting name of UPC: " + upc)
self.pushUPCToThread()
def get_all(self):
for i in range(1, self.items.rowCount()):
for i in range(1, self.items.rowCount()):
if self.items.item(i, TABLE_COL_NAME) is None or self.items.item(i, TABLE_COL_NAME).text() == "N/A":
upc = self.items.item(i, TABLE_COL_UPC).text()
print("Started getting name of UPC:", upc)
self.statusBar().showMessage("Started getting name of UPC: " + upc)
name = get_name_from_upc(upc, wait_interval=1, max_tries=30)
print("Got name", name, "from UPC:", upc)
item = QStandardItem(name)
item.setTextAlignment(Qt.AlignmentFlag.AlignCenter)
self.items.setItem(i, TABLE_COL_NAME, item)
self.itemsTable.resizeColumnToContents(TABLE_COL_NAME)
self.itemsTable.resizeRowsToContents()
self.upcCheckList.append([i, upc])
self.pushUPCToThread()
def del_row(self):
button = self.sender()

3
upc.py
View File

@ -1,10 +1,11 @@
import time
from seleniumbase import Driver
# from selenium import webdriver
driver = Driver(uc=True)
driver.implicitly_wait(5)
def get_name_from_upc(upc: str, wait_interval=3, max_tries=10) -> str:
def get_name_from_upc(upc: str, wait_interval=1, max_tries=30) -> str:
url = "https://stocktrack.ca/wm/index.php?s=wm&upc=" + upc
driver.get(url)