Python中的Asyncio导致线程计数缓慢增加

时间:2019-05-18 13:19:38

标签: python python-3.x multithreading python-asyncio

我目前正在处理一个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)

它可以正常运行并重新启动,但是使用How to build a Chatbot with Watson Assistant (free chatbot course)来跟踪内存使用情况等。我注意到它从2个线程开始,但是每次再次调用该函数时,线程数都会增加1。我猜这表明没有处理任何东西,并且线程处于空闲状态?

您知道我如何清除线程,以免它们继续增加吗?或对如何以更Python化的方式完成此操作有任何建议(大多数时候我是C#开发人员) 我本以为asyncio会在等待后为我执行此操作,但也许不会。

0 个答案:

没有答案