取消交换并在5分钟内获取最新数据
检查信号打开位置的检查如果存在信号,请发送请求到打开位置
观看打开位置,直到关闭
def run(self):
if self.state == 'fetch_data':
self.s1.run_pending()
elif self.state == 'check_signal':
self.check_signal()
elif self.state == 'open_position':
self.open_position()
elif self.state == 'watch_trade':
self.watch_trade()
我需要这个机器人在后台运行很多天。因此,在我的主体中,我这样做:
def run_bot(ticker):
bot = Bot(ticker)
while True:
bot.run()
time.sleep(0.1)
,然后我尝试使用多处理(和consurrent.futures)同时运行几个实例。
from concurrent.futures import ProcessPoolExecutor
if __name__ == '__main__':
with ProcessPoolExecutor(max_workers=3) as executor:
executor.map(run_bot, TICKERS)
print(f'Run process ...')
多处理的问题是它运行了一段时间,然后卡住了(大约1小时后)。基本上,它开始跳过安排的一些请求。有时,它以后再恢复,并且可能会提出很少的请求(通常与预定时间相比延迟几分钟),然后再次卡住。 我做了一些研究,并理解这是多处理的现有问题。提出了一个修复程序。我尝试过,但对我不起作用。由于这条代码行,它引发了错误。但是,实际上提出了这条线作为解决方案。
from multiprocessing import set_start_method
set_start_method("spawn")
总结一下,我想找到的答案很少:
一般。同时运行应用程序 /机器人的几个实例的最佳实践是什么?
为我(?)的多个选择是我的机器人是一个无限循环。该过程永远不会结束,直到停止。潜在的替代方案是什么?
多处理的方法是合理的,但是由于您的机器人无限期运行,因此最好使用螺纹(如果I/O-Bound)或Asyncio,以提高效率。如果每个实例应完全隔离,请考虑使用子过程或Docker将每个机器人作为一个单独的过程,以防止一个失败影响他人。另外,检查系统资源使用率(CPU/内存)可能会导致放缓。