0

几天前我问了一个类似的问题,但有点不清楚,所以我删除了它并在这里制作了这个新问题。

我有一个从加密货币交易所(Binance、Kraken、Poloniex 等)获取市场数据的项目。我希望能够在项目启动并运行时添加额外的交换。例如,我每 10 秒从 Binance 和 Poloniex 提取数据,但现在我想添加对 Kraken 的支持。如何继续从其他两个交易所获取数据(添加 Kraken 而无需重新启动程序)。

我目前有两种解决方案。

  • 启动正在获取数据的客户端作为每次交换的新进程
  • 用于importlib.import_module()加载新模块并在同一进程中处理每个交换(使用 asyncio)

此外,如果我想添加从另一个 API 端点获取数据等功能怎么办。方法 1 可能需要重新启动,使用方法 2 我可以重新加载所有模块并在 fetch 调用之间更新类实例。但我不确定这可能导致的副作用。

也许有一种默认方式是如何实现这样的项目的?

4

1 回答 1

0

我会考虑设计一个基类,命名为CryptoCurrencyExchangeParser. 此类将具有允许客户端代码以标准方式提取数据的方法,无论数据来自哪个交换。每个特定的交换都将是一个子类,包含访问和解析数据的方法(可能在基类中定义为抽象)。

然后我会编写一个工厂函数来加载一个解析器,可能由一个字符串指定。这个工厂函数将使用 python 导入机制来查找请求的解析器​​的代码。主程序将保留活动解析器的列表。

这样的设计意味着所有解析器都使用完全相同的机制,无论它们是在程序启动时加载还是十年后加载。是否使用多处理、多线程或其他方法将作为单独的设计决策考虑在内。

于 2018-05-07T23:01:58.617 回答