(self, names, strategy_file)
| 116 | self._add_main_shutdown(self.clock_engine.stop) |
| 117 | |
| 118 | def load(self, names, strategy_file): |
| 119 | with self.lock: |
| 120 | mtime = os.path.getmtime(os.path.join('strategies', strategy_file)) |
| 121 | |
| 122 | # 是否需要重新加载 |
| 123 | reload = False |
| 124 | |
| 125 | strategy_module_name = os.path.basename(strategy_file)[:-3] |
| 126 | new_module = lambda strategy_module_name: importlib.import_module('.' + strategy_module_name, 'strategies') |
| 127 | strategy_module = self._modules.get( |
| 128 | strategy_file, # 从缓存中获取 module 实例 |
| 129 | new_module(strategy_module_name) # 创建新的 module 实例 |
| 130 | ) |
| 131 | |
| 132 | if self._cache.get(strategy_file, None) == mtime: |
| 133 | # 检查最后改动时间 |
| 134 | return |
| 135 | elif self._cache.get(strategy_file, None) is not None: |
| 136 | # 注销策略的监听 |
| 137 | old_strategy = self.get_strategy(strategy_module.Strategy.name) |
| 138 | if old_strategy is None: |
| 139 | for s in self.strategy_list: |
| 140 | print(s.name) |
| 141 | self.log.warn(u'卸载策略: %s' % old_strategy.name) |
| 142 | self.strategy_listen_event(old_strategy, "unlisten") |
| 143 | time.sleep(2) |
| 144 | reload = True |
| 145 | # 重新加载 |
| 146 | if reload: |
| 147 | strategy_module = importlib.reload(strategy_module) |
| 148 | |
| 149 | self._modules[strategy_file] = strategy_module |
| 150 | |
| 151 | strategy_class = getattr(strategy_module, 'Strategy') |
| 152 | if names is None or strategy_class.name in names: |
| 153 | self.strategies[strategy_module_name] = strategy_class |
| 154 | # 缓存加载信息 |
| 155 | new_strategy = strategy_class(user=self.user, log_handler=self.log, main_engine=self) |
| 156 | self.strategy_list.append(new_strategy) |
| 157 | self._cache[strategy_file] = mtime |
| 158 | self.strategy_listen_event(new_strategy, "listen") |
| 159 | self.log.info(u'加载策略: %s' % strategy_module_name) |
| 160 | |
| 161 | def strategy_listen_event(self, strategy, _type="listen"): |
| 162 | """ |
no test coverage detected