From 5beb1c6fdd9fc4cc44116958447605244252e4d3 Mon Sep 17 00:00:00 2001 From: Migatu Date: Tue, 23 Apr 2024 21:36:20 +0200 Subject: [PATCH] Optimization bug fix #1 --- conjurer_librarian/search_bot.py | 34 ++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/conjurer_librarian/search_bot.py b/conjurer_librarian/search_bot.py index 9c1cb8c..ec17436 100644 --- a/conjurer_librarian/search_bot.py +++ b/conjurer_librarian/search_bot.py @@ -35,7 +35,7 @@ DATABASE_PATH = r"C:\\Database\\chunks\\" ENCODING = "utf-8" CHUNK = "_chunk.txt" _sentinel = object() -WORK_Q_SIZE = 15500000 +WORK_Q_SIZE = 35500000 def producer(out_q, control_q, filename, _logger): @@ -83,25 +83,29 @@ def consumer(in_q, control_q, doi, live_results, result_list, control_dict, _log result_list.append({"DOI": item[0], "exists": False, "data": item[1]}) while True: done_check = True - data = in_q.get() - if data is _sentinel: - _logger.info("Worker finished") - control_dict["sentinels"] += 1 - else: - for item in result_list: - if item["DOI"] in data and not item["exists"]: - _logger.info(data) - _logger.info("HIT") - item["exists"] = True - live_results.append(item) - done_check = done_check and item["exists"] - if done_check: - control_q.put(_sentinel) + try: + data = in_q.get(block=False) + if data is _sentinel: + _logger.info("Worker finished") + control_dict["sentinels"] += 1 + else: + for item in result_list: + if item["DOI"] in data and not item["exists"]: + _logger.info(data) + _logger.info("HIT") + item["exists"] = True + live_results.append(item) + done_check = done_check and item["exists"] + if done_check: + control_q.put(_sentinel) + except Empty: + pass if control_dict["sentinels"] >= MAXTHREADS: _logger.info("All workers finished") break + def search_for_doi(doi, live_results, _logger): """ Search for DOI in live_results using _logger for logging.