該項目是實現自定義流二進制協議的Python 3庫(包)。認爲對流處理的類的:Python 3:當需要向用戶公開經典+ asyncio界面時,重用項目中代碼的最佳方式
MyEncodingWriter(dst_stream)
- 轉換Python對象到原始字節流 MyDecodingReader(src_stream)
- 將原始編碼的字節的消息或Python對象
我需要同時支持阻斷同步流和asyncio StreamReader + StreamWriter
,(可能,從它們繼承)
我知道我不能直接使用coroutines
作爲常規同步功能。
我想模仿ASYNCIO讀/寫器API在我的課MyEncodingWriter()
和MyDecodingReader()
(read(), readexactly(),...
) ,所以唯一的差別將是額外的異步/在ASYNCIO版本等待的關鍵字。
這對我來說很奇怪,我將有兩個副本或回覆,代碼非常類似,我不能重複使用。
現在我只有這個想法... ...嘗試在元類的幫助下從異步動態生成同步代碼(通過剝離異步/等待關鍵字),也許呢?
它有一些更好的方法?
TYA對於這樣的雙重實現的任何建議或美麗的sampes /回購。
謝謝,我認爲它會工作,但什麼是預期的開銷? 我認爲每個電話的換行都會增加一些%....你是否有任何估計這種開銷? – ppmag
猜測百分比開銷並不是真的可能或有幫助。它高度依賴於很多事情(而I/O本身幾乎肯定會壓倒所有其他開銷)。你只能通過分析來回答這個問題。簡單地寫下來,看看你的性能問題在哪裏,然後優化它們。嘗試圍繞單個函數調用進行微優化只會導致代碼混淆,而沒有實際的好處。 (如果這段代碼被頻繁調用以至於會成爲瓶頸,那麼您可能想用C重寫這段代碼。) –