python防止程序多开,但程序运行脚本

LOG_FILE="./app.log"

PID_FILE="./PID.txt"

def log(message):

timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")

line = f"[{timestamp}] {message}"

print(line)

with open(LOG_FILE, "a", encoding="utf-8") as f:

f.write(line + "\n")

def main():

p = multiprocessing.Process(target=realtime_predict_and_control)

p.start()

log(f"启动任务进程 PID={p.pid}")

p.join()

def is_main_process_running():

"""检查 PID 文件中的主进程是否仍在运行"""

if not os.path.exists(PID_FILE):

return False

try:

with open(PID_FILE, "r", encoding='utf-8-sig') as f:

pid = int(f.read().strip())

except:

return False

return psutil.pid_exists(pid)

def write_pid():

"""写入当前主进程 PID"""

with open(PID_FILE, "w") as f:

f.write(str(os.getpid()))

==========================

入口

==========================

if name == "main ":

multiprocessing.freeze_support()

复制代码
if is_main_process_running():
    log("已有实例在运行(主进程存在),退出。")
    time.sleep(3)
    sys.exit(0)

write_pid()
main()
相关推荐
Csvn1 天前
🌟 LangChain 30 天保姆级教程 · Day 13|OutputParser 进阶!让 AI 输出自动转为结构化对象,并支持自动重试!
python·langchain
Wenweno0o1 天前
0基础Go语言Eino框架智能体实战-chatModel
开发语言·后端·golang
chenjingming6661 天前
jmeter线程组设置以及串行和并行设置
java·开发语言·jmeter
BoomHe1 天前
Android AOSP13 原生 Launcher3 壁纸获取方式
android
cch89181 天前
Python主流框架全解析
开发语言·python
不爱吃炸鸡柳1 天前
C++ STL list 超详细解析:从接口使用到模拟实现
开发语言·c++·list
十五年专注C++开发1 天前
RTTR: 一款MIT 协议开源的 C++ 运行时反射库
开发语言·c++·反射
Momentary_SixthSense1 天前
设计模式之工厂模式
java·开发语言·设计模式
sg_knight1 天前
设计模式实战:状态模式(State)
python·ui·设计模式·状态模式·state
好运的阿财1 天前
process 工具与子agent管理机制详解
网络·人工智能·python·程序人生·ai编程