[新功能] 进程ID运行判断
This commit is contained in:
parent
2e8513fea6
commit
561a2dbbfc
81
vnpy/trader/util_pid.py
Normal file
81
vnpy/trader/util_pid.py
Normal file
@ -0,0 +1,81 @@
|
||||
#!/usr/bin/python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import os
|
||||
import platform
|
||||
|
||||
# 保存进程ID => logs/pid.txt
|
||||
# 运行开始时,检查是否存在之前得pid进程
|
||||
|
||||
# 日志文件路径
|
||||
logs_path = os.path.abspath(os.path.join(os.getcwd(), 'logs'))
|
||||
if not os.path.isdir(logs_path):
|
||||
os.mkdir(logs_path)
|
||||
assert os.path.isdir(logs_path)
|
||||
|
||||
# 记录pid得文件
|
||||
pid_file = os.path.abspath(os.path.join(logs_path, 'pid.txt'))
|
||||
|
||||
|
||||
def _check_pid(pid):
|
||||
"""
|
||||
检查pid是否与当前进程pid一致
|
||||
:param pid:
|
||||
:return:
|
||||
"""
|
||||
cur_pid = os.getpid()
|
||||
if cur_pid != pid:
|
||||
return False
|
||||
return True
|
||||
|
||||
|
||||
def _check_status():
|
||||
"""
|
||||
检查状态
|
||||
:return:
|
||||
"""
|
||||
if os.path.exists(pid_file):
|
||||
with open(pid_file, 'r') as f:
|
||||
pid = f.read().strip()
|
||||
# print(pid)
|
||||
if pid != "":
|
||||
if _check_pid(pid):
|
||||
return pid
|
||||
return None
|
||||
|
||||
|
||||
def _save_pid(log=True):
|
||||
"""
|
||||
保存pid
|
||||
:param log:
|
||||
:return:
|
||||
"""
|
||||
plat = str(platform.system())
|
||||
if plat == 'Windows':
|
||||
pid = os.getpid()
|
||||
else: # unix
|
||||
pid = os.getpid()
|
||||
if log:
|
||||
print('pid={}'.format(pid))
|
||||
|
||||
with open(pid_file, 'w') as f:
|
||||
f.write(str(pid))
|
||||
if log:
|
||||
print(u'wrote pid file:{}'.format(pid_file))
|
||||
|
||||
|
||||
def update_pid():
|
||||
"""
|
||||
更新pid
|
||||
:return:
|
||||
"""
|
||||
_save_pid(log=False)
|
||||
|
||||
|
||||
# 执行检查
|
||||
if _check_status():
|
||||
import sys
|
||||
print(u'another service is already running...', file=sys.stderr)
|
||||
exit(0)
|
||||
|
||||
_save_pid()
|
Loading…
Reference in New Issue
Block a user