Я хобби-программист, начинающий с AHK, затем немного java, и теперь я пытаюсь изучать Python. Я искал и нашел несколько советов, но пока не смог внедрить их в свой собственный код. Надеюсь, кто-то здесь может мне помочь, это очень короткая программа.Я использую базу данных .txt csv с ";"в качестве разделителя.ПРИМЕР БАЗЫ ДАННЫХ:
Какого цвета обычно является кошкой?; Черный
Какого роста был самый длинный человек на земле?; 272 см
Земля круглая?; Да
База данных теперь состоит из 20 000 строк, что заставляет программу «замедляться», используя только 25% ЦП (1 ядро).
Если я смогу использовать все 4 ядра (100%)Я думаю, что это будет выполнять задачу намного быстрее.Задача состоит в том, чтобы сравнить CLIPBOARD с базой данных и, если есть совпадение, он должен дать мне ответ в качестве возврата.Возможно также, я могу разделить базу данных на 4 части?
Код сейчас выглядит так!Не более чем 65 строк и это делает свою работу (но медленно).Советы о том, как я могу превратить этот процесс в многоядерный.
import time
import pyperclip as pp
import pandas as pd
import pymsgbox as pmb
from fuzzywuzzy import fuzz
import numpy
ratio_threshold = 90
fall_back_time = 1
db_file_path = 'database.txt'
db_separator = ';'
db_encoding = 'latin-1'
def load_db():
while True:
try:
# Read and create database
db = pd.read_csv(db_file_path, sep=db_separator, encoding=db_encoding)
db = db.drop_duplicates()
return db
except:
print("Error in load_db(). Will sleep for %i seconds..." % fall_back_time)
time.sleep(fall_back_time)
def top_answers(db, question):
db['ratio'] = db['question'].apply(lambda q: fuzz.ratio(q, question))
db_sorted = db.sort_values(by='ratio', ascending=False)
db_sorted = db_sorted[db_sorted['ratio'] >= ratio_threshold]
return db_sorted
def write_txt(top):
result = top.apply(lambda row: "%s" % (row['answer']), axis=1).tolist()
result = '\n'.join(result)
fileHandle = open("svar.txt", "w")
fileHandle.write(result)
fileHandle.close()
pp.copy("")
def main():
try:
db = load_db()
last_db_reload = time.time()
while True:
# Get contents of clipboard
question = pp.paste()
# Rank answer
top = top_answers(db, question)
# If answer was found, show results
if len(top) > 0:
write_txt(top)
time.sleep(fall_back_time)
except:
print("Error in main(). Will sleep for %i seconds..." % fall_back_time)
time.sleep(fall_back_time)
if name == 'main':
main()'