v1.0.3; fix multiprocess global variables bug
This commit is contained in:
@@ -1,4 +1,7 @@
|
||||
# UPDATE
|
||||
## 20260101
|
||||
### v1.0.3
|
||||
Fix bug: 修复多进程中修改全局参数配置的问题, 同一个进程池中修改的全局变量会被保留, 因此task_register中需要实例化对象
|
||||
## 20251231
|
||||
### v1.0.2
|
||||
1. 删除pyproject.toml文件, 使用`pip install -e .`就可以安装到pip easy-install.pth中, vscode能找到robogauge包
|
||||
|
||||
@@ -28,12 +28,14 @@ class BasePipeline:
|
||||
run_name: str,
|
||||
simulator_cfg: MujocoConfig,
|
||||
robot_cfg: RobotConfig,
|
||||
gauge_cfg: BaseGaugeConfig
|
||||
gauge_cfg: BaseGaugeConfig,
|
||||
args,
|
||||
):
|
||||
self.run_name = run_name
|
||||
self.sim_cfg = simulator_cfg
|
||||
self.robot_cfg = robot_cfg
|
||||
self.gauge_cfg = gauge_cfg
|
||||
self.args = args
|
||||
|
||||
self.sim: MujocoSimulator = eval(simulator_cfg.simulator_class)(simulator_cfg)
|
||||
self.robot: BaseRobot = eval(robot_cfg.robot_class)(robot_cfg)
|
||||
@@ -44,7 +46,7 @@ class BasePipeline:
|
||||
|
||||
# save configs
|
||||
cfg = {}
|
||||
for name in ['sim_cfg', 'robot_cfg', 'gauge_cfg']:
|
||||
for name in ['args', 'sim_cfg', 'robot_cfg', 'gauge_cfg']:
|
||||
obj = getattr(self, name)
|
||||
obj_dict = class_to_dict(obj)
|
||||
cfg.update({name: obj_dict})
|
||||
|
||||
@@ -38,6 +38,7 @@ GOALS = {
|
||||
}
|
||||
|
||||
def run_pipeline(args, progress_queue, data):
|
||||
try:
|
||||
args = deepcopy(args)
|
||||
task_id = data['task_id']
|
||||
search = data['search_max_level']
|
||||
@@ -86,6 +87,17 @@ def run_pipeline(args, progress_queue, data):
|
||||
}
|
||||
report_progress(progress_data, ProgressTypes.FINISH, desc=f"✅ Done (Lv {level})")
|
||||
return results
|
||||
except Exception as e:
|
||||
error_context = (
|
||||
f"\n{'='*20} 💥 CRASH CONTEXT 💥 {'='*20}\n"
|
||||
f"Terrain : {data.get('terrain_name')}\n"
|
||||
f"Friction : {data.get('friction')}\n"
|
||||
f"Base Mass : {data.get('base_mass')}\n"
|
||||
f"Task ID : {data.get('task_id')}\n"
|
||||
f"Original Error: {str(e)}\n"
|
||||
f"{'='*60}"
|
||||
)
|
||||
raise RuntimeError(error_context) from e
|
||||
|
||||
class StressPipeline:
|
||||
def __init__(self, args):
|
||||
|
||||
@@ -33,9 +33,9 @@ class TaskRegister():
|
||||
def get_cfgs(self, name):
|
||||
if name not in self.sim_cfgs:
|
||||
raise ValueError(f"Task '{name}' is not registered, checkout '{ROBOGAUGE_ROOT_DIR}/robogauge/tasks/__init__.py'.")
|
||||
sim_cfg = self.sim_cfgs[name]
|
||||
gauger_cfg = self.gauger_cfgs[name]
|
||||
robot_cfg = self.robot_cfgs[name]
|
||||
sim_cfg = self.sim_cfgs[name]()
|
||||
gauger_cfg = self.gauger_cfgs[name]()
|
||||
robot_cfg = self.robot_cfgs[name]()
|
||||
return sim_cfg, gauger_cfg, robot_cfg
|
||||
|
||||
def make_pipeline(self, args=None, sim_cfg=None, gauger_cfg=None, robot_cfg=None, create_logger=True):
|
||||
@@ -55,7 +55,7 @@ class TaskRegister():
|
||||
run_name = args.run_name + f'_{args.seed}'
|
||||
if create_logger:
|
||||
logger.create(args.experiment_name, run_name)
|
||||
return pipeline_class(run_name, sim_cfg, robot_cfg, gauger_cfg)
|
||||
return pipeline_class(run_name, sim_cfg, robot_cfg, gauger_cfg, args)
|
||||
|
||||
def update_args_to_cfg(self, sim_cfg, gauger_cfg, robot_cfg, args):
|
||||
if args.model_path is not None:
|
||||
|
||||
Reference in New Issue
Block a user