我構造了我的類來解析消息,這是一個字典(可能來自JSON對象),有關更多信息,請參見pastebin。 因爲我會得到這些對象的許多,我不想處理它們全部 我認爲跳過初始化方法的一些步驟。所以我寫了一個條件初始化類。 我把一個glance
標誌,如果處於活動狀態將只處理7個可能的成員中的3個。 我希望保持選項稍後查看參數,因此我還想把opt
標誌只存儲消息進行進一步處理。部分構造函數初始化的性能
class CbkQuery:
def __init__(self, query_msg, glance = False, opt = True):
#required arguments
self.id = query_msg['id']
self.person = Person(query_msg['from'])
self.chat_instance = query_msg['chat_instance']
if glance:
pass
else:
self.query_msg = query_msg
if opt:
# optional arguments
self.data = self.query_msg.get('data')
self.message = self.query_msg.get('message')
if self.message is not None:
self.message = Message(self.message)
self.inline_message_id = self.query_msg.get('inline_message_id')
self.game_short_name = self.query_msg.get('game_short_name')
現在,因爲我沒有這個噱頭實際上有一個性能增益,我決定記錄的性能(是一個自定義日誌類我做了一個使用perf_counter()
,我反正檢查多次,在時間的差異顯得穩重)
glance processing took: (glance flag True, opt flag False)
Elapsed time for subprocess: 00:00:01.749
store query, processing took: (glance flag False, opt flag False)
Elapsed time for subprocess: 00:00:00.182
build complete class processing took: (glance flag False, opt flag True
Elapsed time for subprocess: 00:00:01.322
「驚喜驚喜,一眼類需要更長的時間,那麼所有其他(?!?!?),最快的是存儲‘的類未處理消息’。 有人可以解釋我爲什麼嗎?這是否是因爲存儲未處理的消息實際上使淺拷貝而不是副本?
我使用了模塊時間和perf_counter,我知道它不是精確的,但是它們的差異爲1秒,而且我感興趣的是底部時間我的電腦需要什麼時間來完成該操作,而不是時間(如去除.sleep())等......(至少這是使用perf而不是其他更準確的測量方法的原因) – Pella86
Oups,我想問你是否使用了模塊' timeit'。它允許Python代碼的精確計時,因爲它會自動執行一些執行並計算平均值。 –