我有一个奇怪的情况:我继承了一个项目,它有许多Python进程同时运行各种各样的东西。这些过程彼此独立地分开;不涉及多处理/线程。
我想添加一些功能,当某些事件发生时,它们会写入单行文本文件并进行单行更新,然后我可以稍后解析(可能在单独的服务器上)来收集统计信息。
我正在寻找一种方法将此行附加到文件中,如果其他进程之一试图同时执行相同的操作,则不会导致问题。如果可能的话,我不想在堆栈中添加任何其他软件。
建议?
答案 0 :(得分:4)
听起来您可能想尝试使用file lock:
lock = FileLock("/some/file/or/other")
while not lock.i_am_locking():
try:
lock.acquire(timeout=60) # wait up to 60 seconds
except LockTimeout:
lock.break_lock()
lock.acquire()
print "I locked", lock.path
lock.release()
http://pythonhosted.org/lockfile/lockfile.html#filelock-objects
答案 1 :(得分:1)
使用队列http://docs.python.org/2/library/multiprocessing.html#multiprocessing.Queue。您的所有进程都可以将数据放入队列,其中一个进程获取数据并写入文件。
答案 2 :(得分:0)
具有单个文件写入过程,并让其他文件队列消息以供其写入。这可以通过事件提升,消息队列,pyro,发布,您的选择!
答案 3 :(得分:0)
logging
模块在设计上是线程安全的,它位于标准库中,可以写入文件。