我试图编写一个锁功能,使我的脚本只有一个实例同时运行。但是,当我将调试消息或其他函数添加到代码中时,contextmanager并不喜欢。
有什么想法可以解决这个问题,用相同的功能和日志消息吗?
锁功能:
@contextmanager
def lockfile(lock_file='/run/lock/my_script.lock'):
if os.path.exists(lock_file):
logging.INFO('Found lock file with pid')
lf = open(lock_file)
pid = lf.readline()
try:
os.kill(pid, 0)
except OSError:
logging.INFO('Removing stale lock file')
os.remove(lock_file)
else:
logging.INFO('Process still running. Aborting')
sys.exit(1)
if not os.path.exists(lock_file):
pid = os.getpid()
open(lock_file, 'w').write(pid)
try:
yield
finally:
os.remove(lock_file)呼叫功能
with lockfile():
do something回溯:
Traceback (most recent call last):
File "/home/vagrant/.pycharm_helpers/pydev/pydevd.py", line 1733, in <module>
debugger.run(setup['file'], None, None)
File "/home/vagrant/.pycharm_helpers/pydev/pydevd.py", line 1226, in run
pydev_imports.execfile(file, globals, locals) # execute the script
File "/vagrant/my_script", line 274, in <module>
with lockfile():
File "/usr/lib/python2.7/contextlib.py", line 17, in __enter__
return self.gen.next()
File "/vagrant/my_script", line 56, in lockfile
logging.INFO('Found lock file with pid')
TypeError: 'int' object is not callable发布于 2014-11-10 16:03:28
logging.INFO不是一个函数。它是一个int对象,它表示不可调用的日志记录级别。
您可能想要使用logging.info代替。
...
logging.info('Removing stale lock file')
...
logging.info('Process still running. Aborting')https://stackoverflow.com/questions/26847788
复制相似问题