我是一個愛好編碼員,從 AHK 開始,然后是一些 Java,現在我嘗試學習 Python。我已經搜索并找到了一些提示,但我還沒有能夠將它實現到我自己的代碼中。 希望這里有人可以幫助我,這是一個非常短的程序。我正在使用帶有“;”的 .txt csv 數據庫 作為分隔符。數據庫示例:哪種顏色通常是貓?;黑色地球上最長的人有多高?;272 厘米地球是圓的嗎?;是的數據庫現在由 20.000 行組成,這使程序“變慢”,僅使用 25% 的 CPU(1 個核心)。如果我可以讓它使用所有 4 個內核(100%),我想它會更快地執行任務。任務基本上是將剪貼板與數據庫進行比較,如果匹配,它應該給我一個答案作為回報。也許我也可以將數據庫分成 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)
Python 多核 CSV 短程序,需要建議/幫助
慕婉清6462132
2021-06-30 09:01:28