亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在python中緩存一個不改變的經常讀取的文件

在python中緩存一個不改變的經常讀取的文件

達令說 2023-07-05 17:42:08
好吧,大家讓我舉例說明,我有這個def get_config_file(file='scrapers_conf.json'):    """    Load the default .json config file    """    return json.load(open(file))這個函數被調用很多,這將在服務器上,每個請求都會觸發這個函數至少 5 次,我有多個刮刀在運行,每個刮刀都在以下形狀上。為了方便起見,我刪除了輔助方法,問題是,每個抓取工具都應該有自己的請求標頭、有效負載……或者使用位于的默認標頭scrapers_conf.jsonclass Scraper(threading.Thread): # init is overriden and has set .conf    def run(self):        self.get()    def get(self):        # logic問題是我得到的標題像class Scraper(threading.Thread):    def run(self):        self.get()    def get(self):        headers = self.conf.get('headers') or get_config_file().get('headers')正如您所看到的,每個請求的每個實例都會調用 get_config_file() 函數,我認為這在我的情況下不是最佳的。我知道,lru_cache但我不認為這是最佳解決方案(請糾正我?。┡渲梦募苄?,os.sys.getsizeof報告不到 1 KB。我正在考慮將其保留,因為考慮到讀取 1 KB 不是問題。
查看完整描述

2 回答

?
炎炎設計

TA貢獻1808條經驗 獲得超4個贊

我完全忘記了@functools.cached_property


@cached_property

def get_config_file(file='scrapers_conf.json'):

    """

    Load the default .json config file

    """

    return json.load(open(file))


查看完整回答
反對 回復 2023-07-05
?
夢里花落0921

TA貢獻1772條經驗 獲得超6個贊

lru_cache(maxsize=None)聽起來是正確的方法;maxsize=None通過關閉 LRU 機制可以使其速度更快。

另一種方法是get_config_file()在程序的開頭(在__init__get或實例化類的地方)調用,將其分配給每個 Scraper 類上的一個屬性,然后始終引用self.config(或其他方式)。這樣做的優點是您可以在單元測試中跳過讀取配置文件 - 您可以將測試配置直接傳遞到類中。

在這種情況下,由于該類已經有一個self.conf,因此最好使用文件中的值更新該字典,而不是在每個方法中引用兩個位置。


查看完整回答
反對 回復 2023-07-05
  • 2 回答
  • 0 關注
  • 149 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號