我在linux上使用Python 2.6。
我有一个在后台启动多个服务并生成kill.py来杀死这些进程的run.py脚本。
在kill.py内部,当它完成它的工作时,解除自身的链接是否安全?
import os
# kill services
os.unlink(__file__)
# is it safe to do something here?我是Python的新手。我担心的是,由于Python是一种脚本语言,整个脚本可能不在内存中。取消链接后,将不再需要解释更多代码。
我试过这个小测试。
import os
import time
time.sleep(10) # sleep 1
os.unlink(__file__)
time.sleep(10) # sleep 2我在运行这个文件时运行了stat kill.py,链接的数量始终为1,所以我猜Python解释器没有保存指向该文件的链接。
作为一个更高层次的问题,创建一个稍后可以轻松终止的进程列表的通常方法是什么?
发布于 2011-12-01 06:31:34
如果可以避免的话,不要让你的脚本编写新的脚本--只要写出PID的列表,然后通过它们。你想做什么并不是很清楚,但创建和删除脚本听起来像是太脆弱的魔术了。
回答这个问题: Python编译所有源代码并在执行之前关闭文件,所以这是安全的。
通常,在Linux上取消链接打开的文件是安全的。(但不是所有地方:在Windows上,您不能删除正在使用的文件。)
请注意,当您对一个模块执行import时,Python2会将其编译成一个.pyc字节码文件并对其进行解释。如果删除.py文件,Python仍将使用.pyc,反之亦然。
发布于 2011-12-01 06:17:16
别给reload打电话!
Python不需要对文件进行锁定,因为它们是在导入时编译和加载的。实际上,在程序运行时交换文件的能力通常非常有用。
发布于 2011-12-01 06:24:09
IIRC(!):当on *nix时,unlink只删除文件系统中的名称,当最后一个文件句柄关闭时,inode被删除。因此,这应该不会引起任何问题,除非python尝试重新打开该文件。
https://stackoverflow.com/questions/8333658
复制相似问题