<p>我创建了一个python decorator(mutli平台兼容),它提供了一种避免并发执行的机制。
用法是:</p>
<pre><code>@lock('file.lock')
def run():
# Function action
pass
</code></pre>
<p>个人而言,我习惯使用相对路径:</p>
^{pr2}$
<p>装饰师:</p>
<pre><code>import os
def lock(lock_file):
"""
Usage:
@lock('file.lock')
def run():
# Function action
"""
def decorator(target):
def wrapper(*args, **kwargs):
if os.path.exists(lock_file):
raise Exception('Unable to get exclusive lock.')
else:
with open(lock_file, "w") as f:
f.write("LOCK")
# Execute the target
result = target(*args, **kwargs)
remove_attempts = 10
os.remove(lock_file)
while os.path.exists(lock_file) and remove_attempts >= 1:
os.remove(lock_file)
remove_attempts-=1
return result
return wrapper
return decorator
</code></pre>
<h2>对于多线程调用</h2>
<p>有一个用于管理多线程调用的unix解决方案:<a href="https://gist.github.com/mvliet/5715690" rel="nofollow noreferrer">https://gist.github.com/mvliet/5715690</a></p>
<p>别忘了感谢这篇文章的作者(不是我)。在</p>