我目前正在编写一个Python脚本,它将运行很长一段时间。有一个函数我希望重复运行,因此我创建了一个带有静态包装器方法的类,我将该函数传递给它并用asyncio调用它。当此函数完成或发生崩溃时,我将处理它并重新启动该函数:
class ContinuousProcessWrapper:
@staticmethod
async def run_continuous_process(function):
while True:
try:
await function()
except Exception as e:
logging.error(e)
logging.warning("Restarting Continuous Process...")
我从main()
方法中将此包装器称为函数,如下所示:
loop = asyncio.get_event_loop()
task = loop.create_task(
ContinuousProcessWrapper.run_continuous_process(logging_workflow))
loop.run_until_complete(task)
我的函数如下所示:
async def logging_workflow():
data_processor = DataProcessor(Settings.environment)
data_client = Client(Settings.account)
data_client.connect()
if len(market_ids) > 0:
# run task here
else:
logging.info(f"Sleeping")
sleep(3600)
它运行正常,应该重新启动,但使用Monit跟踪内存使用情况等。我注意到它以2个线程开始,但每次再次调用该函数时,线程数都会增加1。我猜这表示某个线程没有被释放,而某个线程处于空闲状态?你知道吗
你知道我怎样才能清除线程,使它们不会继续增加吗?或者你有什么建议可以用一种更具python风格的方式来实现(我大部分时间都是C#dev) 我本以为asyncio会在等待之后为我做这些,但也许不会。你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐