我使用gstreamer插件编写python脚本。
它返回一个分段错误,因为发生了访问共享文件(一个线程写入和gstremear一个创建的线程)的竞争。
我想在写作阶段锁定它,阅读Python文档。
我在__init__
:
self.lock=thread.allocate_lock()
然后在同一类__init__
中的另一个函数中:
self.lock.acquire()
try:
plt.savefig(self.filepath_image,transparent=True)
finally:
self.lock.release()
答案 0 :(得分:1)
好的,如果我理解你的情况是正确的,你可能想让savefig
操作原子,这可以这样做:
import os, shutil, tempfile
tempfile = os.path.join(tempfile.tempdir, self.filepath_image)
# ^^^ or simply self.filepath_image + '.tmp'
try:
plt.savefig(tempfile,transparent=True) # draw somewhere else
shutil.move(tempfile, self.filepath_image) # move to the target
finally:
if os.path.exists(tempfile):
os.remove(tempfile)
shutil.move
是原子的(至少在Unix中,在同一个FS中),所以在它准备好使用之前,没有人会访问目标文件。