在python中执行后台进程

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

在Python中,我试图运行一个进程(将大量数据存储到数据库)作为后台进程,它不应该等待返回当前执行函数的响应。我尝试了下面的代码。但它并没有达到我的预期。

async def import_and_background_task(myobj):
    asyncio.ensure_future(myobj.storeDataToDb())

def exectuteReport():
    myobj.readInputFile()
    myobj.readDatafromDb()
    myobj.generateReport()
    # myobj.storeDataToDb()
    asyncio.run(import_and_background_task(myobj))
    print('its done')
    return {success:True}

storeDataToDb
函数的示例定义是,

def storeDataToDb():
    count = 0
    while count < 5:
        print('storing set {} of data to db'.format(count))
        count += 1
        time.sleep(2)  # Delays for 2 seconds. You can adjust as needed.

我期望它会立即返回 {success:True} 而不是等待打印

storing set {} of data to db
。但正在等待完成
storeDataToDb
的所有作品。如何将 storeDataToDb 函数作为后台进程运行?

python multiprocessing python-asyncio
1个回答
0
投票

像这样使用线程:

from threading import Thread

t = Thread(target=myobj.storeDataToDb)
t.start()

请记住,如果 Python 中的大部分代码都是 CPU 密集型的,那么最好使用进程,但是对于上面提到的类来说,这会变得更加困难。我不认为这是问题,因为将数据存储到数据库主要是 IO。

如果它在代码中多次发生,我建议使用 concurrent.futures 来实现更多的鲁棒执行器和任务排队。

© www.soinside.com 2019 - 2024. All rights reserved.