如何持续集成(CI)永远运行的关键Python应用程序?

时间:2018-03-16 14:31:04

标签: python jenkins continuous-integration jenkins-pipeline

我用Python编写了一个加密交易机器人,运行24-7。我想通过CI软件Jenkins不断地将新功能和错误修复集成到这个应用程序。但问题是我无法杀死应用程序,检查最新版本并重新启动应用程序;因为机器人可能在任何给定时间都有活跃的交易(目前在交易中)。杀死应用程序会使机器人松动其订单。我正在考虑将我的活动交易数据转储到数据库中,终止应用程序,更新它,重新启动它并从数据库加载交易数据以恢复机器人对交易的意识。但我不确定这是否是最好的方法。有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

总结一下。

  1. 要保存状态,请考虑使用Redis
  2. 收听系统信号以触发正常关机,如下所示:

    import signal
    ... 
    
    def handler_stop_signals(*args, **kwargs):
     """ Handle system signals
        only SIGTERM expected to trigger this"""
    
        Log.log(__name__).info('Gracefully shutting down')
        my_process.shutdown()
    
    
    if __name__ == 'main':   
        signal.signal(signal.SIGTERM, handler_stop_signals)
    

    不需要不同的过程,cli,api。注册一个监听器,一旦发出信号,这个回调就会启动。 有关详细信息,请转到here

  3. 然后,当您想使用jenkins部署新版本时,只需停止或终止服务,然后部署并启动。