85 lines
2.1 KiB
Python
85 lines
2.1 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""
|
|
Worker 启动入口。
|
|
启动方式: python -m worker.main [--server ws://IP:8000/ws] [--worker-id pc-a] [--worker-name 电脑A]
|
|
"""
|
|
from __future__ import annotations
|
|
|
|
import argparse
|
|
import asyncio
|
|
import logging
|
|
import sys
|
|
|
|
from worker import config
|
|
from worker.tasks.registry import register_all_handlers
|
|
from worker.ws_client import WorkerWSClient
|
|
|
|
logging.basicConfig(
|
|
level=logging.INFO,
|
|
format="%(asctime)s %(name)-28s %(levelname)-5s %(message)s",
|
|
datefmt="%Y-%m-%d %H:%M:%S",
|
|
)
|
|
logger = logging.getLogger("worker.main")
|
|
|
|
|
|
def parse_args():
|
|
parser = argparse.ArgumentParser(description="Browser Control Worker Agent")
|
|
parser.add_argument(
|
|
"--server",
|
|
default=config.SERVER_WS_URL,
|
|
help=f"中央服务器 WebSocket 地址 (默认: {config.SERVER_WS_URL})",
|
|
)
|
|
parser.add_argument(
|
|
"--worker-id",
|
|
default=config.WORKER_ID,
|
|
help=f"Worker ID (默认: {config.WORKER_ID})",
|
|
)
|
|
parser.add_argument(
|
|
"--worker-name",
|
|
default=config.WORKER_NAME,
|
|
help=f"Worker 名称 (默认: {config.WORKER_NAME})",
|
|
)
|
|
parser.add_argument(
|
|
"--bit-api",
|
|
default=config.BIT_API_BASE,
|
|
help=f"比特浏览器本地 API 地址 (默认: {config.BIT_API_BASE})",
|
|
)
|
|
return parser.parse_args()
|
|
|
|
|
|
async def run(args):
|
|
# 注册所有任务处理器
|
|
register_all_handlers()
|
|
logger.info("已注册任务处理器")
|
|
|
|
# 创建 WebSocket 客户端并运行
|
|
client = WorkerWSClient(
|
|
server_url=args.server,
|
|
worker_id=args.worker_id,
|
|
worker_name=args.worker_name,
|
|
bit_api_base=args.bit_api,
|
|
)
|
|
|
|
logger.info(
|
|
"Worker 启动: id=%s, name=%s, server=%s",
|
|
args.worker_id, args.worker_name, args.server,
|
|
)
|
|
|
|
try:
|
|
await client.run()
|
|
except KeyboardInterrupt:
|
|
logger.info("收到中断信号,正在退出...")
|
|
await client.stop()
|
|
|
|
|
|
def main():
|
|
args = parse_args()
|
|
try:
|
|
asyncio.run(run(args))
|
|
except KeyboardInterrupt:
|
|
logger.info("Worker 已退出")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|