を使用し、このオブジェクトを外部プログラムに渡してから、Popen
を使用して出力を収集しようとしています。私の希望は、ハードディスク上に実際のファイルを作成し、可能な限り多くのIOを避けるよりも早くなることでした。私が作成している一時ファイルのこのサイズは、KB程度の小さなもので、作業する一時ファイルの作成は、通常のファイルを読み書きに使用するよりも実際に遅いことがわかりました。私はここで欠けているトリックはありますか? NamedTemporaryFileを使用すると、何が起こっているのですか?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
プロファイリングを少し行うと、ほぼすべての時間がtempオブジェクトの作成に費やされたように見えます。 tempfile.NamedTemporaryFile(delete=False)
を使用すると、この例では8ms以上かかる
おそらく名前の衝突を避けるためにチェックが行われます。 –