mirror of
https://github.com/xinnan-tech/xiaozhi-esp32-server.git
synced 2026-07-22 07:03:53 +08:00
fix: 移除 RuntimeInstanceLock 锁文件机制
This commit is contained in:
@@ -1,63 +1,13 @@
|
|||||||
import os
|
|
||||||
import threading
|
import threading
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
if os.name == "nt":
|
|
||||||
import msvcrt
|
|
||||||
else:
|
|
||||||
import fcntl
|
|
||||||
|
|
||||||
from wakeword_runtime.config import load_config, setup_logging
|
from wakeword_runtime.config import load_config, setup_logging
|
||||||
from wakeword_runtime.runtime import TestRuntimeApplication, TestRuntimeHttpServer
|
from wakeword_runtime.runtime import TestRuntimeApplication, TestRuntimeHttpServer
|
||||||
|
|
||||||
|
|
||||||
class RuntimeInstanceLock:
|
|
||||||
def __init__(self, lock_path: Path) -> None:
|
|
||||||
self.lock_path = lock_path
|
|
||||||
self._handle = None
|
|
||||||
|
|
||||||
def acquire(self) -> bool:
|
|
||||||
self.lock_path.parent.mkdir(parents=True, exist_ok=True)
|
|
||||||
self._handle = open(self.lock_path, "a+b")
|
|
||||||
try:
|
|
||||||
if os.name == "nt":
|
|
||||||
self._handle.seek(0)
|
|
||||||
msvcrt.locking(self._handle.fileno(), msvcrt.LK_NBLCK, 1)
|
|
||||||
else:
|
|
||||||
fcntl.flock(self._handle.fileno(), fcntl.LOCK_EX | fcntl.LOCK_NB)
|
|
||||||
self._handle.seek(0)
|
|
||||||
self._handle.truncate()
|
|
||||||
self._handle.write(str(os.getpid()).encode("ascii"))
|
|
||||||
self._handle.flush()
|
|
||||||
return True
|
|
||||||
except OSError:
|
|
||||||
self.release()
|
|
||||||
return False
|
|
||||||
|
|
||||||
def release(self) -> None:
|
|
||||||
if self._handle is None:
|
|
||||||
return
|
|
||||||
try:
|
|
||||||
if os.name == "nt":
|
|
||||||
self._handle.seek(0)
|
|
||||||
msvcrt.locking(self._handle.fileno(), msvcrt.LK_UNLCK, 1)
|
|
||||||
else:
|
|
||||||
fcntl.flock(self._handle.fileno(), fcntl.LOCK_UN)
|
|
||||||
except OSError:
|
|
||||||
pass
|
|
||||||
finally:
|
|
||||||
self._handle.close()
|
|
||||||
self._handle = None
|
|
||||||
|
|
||||||
|
|
||||||
def main() -> int:
|
def main() -> int:
|
||||||
test_root = Path(__file__).resolve().parent
|
test_root = Path(__file__).resolve().parent
|
||||||
runtime_root = test_root / "wakeword_runtime"
|
runtime_root = test_root / "wakeword_runtime"
|
||||||
lock = RuntimeInstanceLock(runtime_root / ".runtime.lock")
|
|
||||||
if not lock.acquire():
|
|
||||||
print("failed to start test runtime: another test runtime instance is already running")
|
|
||||||
print("请先关闭已有的 test runtime 进程,再重新启动。")
|
|
||||||
return 1
|
|
||||||
|
|
||||||
config = load_config(runtime_root)
|
config = load_config(runtime_root)
|
||||||
setup_logging(config.log_file, config.log_level)
|
setup_logging(config.log_file, config.log_level)
|
||||||
@@ -94,7 +44,6 @@ def main() -> int:
|
|||||||
with app_lock:
|
with app_lock:
|
||||||
app.shutdown()
|
app.shutdown()
|
||||||
http_server.shutdown()
|
http_server.shutdown()
|
||||||
lock.release()
|
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user