如何运行与同时具有不同参数的Python无限循环机器人的几个平行实例?

问题描述 投票:0回答:0

取消交换并在5分钟内获取最新数据

检查信号打开位置的检查

如果存在信号,请发送请求到打开位置

观看打开位置,直到关闭
    再次开始整个过程
  1. 核心程序的代码段
  2. 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/内存)可能会导致放缓。

python python-multiprocessing threadpool python-multithreading infinite-loop
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.