我試圖使用NamedTemporaryFile並將此對象傳遞給外部程序使用,然後使用Popen
收集輸出。我希望這會比在硬盤上創建真實文件更快,並儘可能避免IO。我創建的臨時文件的大小很小,大約爲KB左右,我發現創建臨時文件的工作實際上比使用普通文件讀/寫要慢。我在這裏錯過了一個詭計嗎?當我使用NamedTemporaryFile時幕後發生了什麼?命名臨時文件速度不足
# Using named temp file
with tempfile.NamedTemporaryFile(delete=False) as temp: # delete=False to keep a reference to the file for process calls
for idx, item in enumerate(r):
temp.write(">{}\n{}\n".format(idx, item[1]))
>>> 8.435 ms
# Using normal file io
with open("test.fa", "w") as temp:
for idx, item in enumerate(r):
temp.write(">{}\n{}\n".format(idx, item[1]))
>>> 0.506 ms
#--------
# Read using temp file
[i for i in open(name, "r")]
>>> 1.167 ms
[i for i in open("test.fa", "r")]
>>> 0.765 ms
做了一點分析似乎幾乎整個時間都花在創建臨時對象上。在此示例中使用tempfile.NamedTemporaryFile(delete=False)
需要超過8毫秒
也許檢查是爲了避免名稱衝突。 –