如何在Django视图中使用python multiprocessing模块


问题内容

我有一个简单的函数,它遍历了URL列表,GET用于检索一些信息并相应地更新DB(PostgresSQL)。该功能运行完美。但是,一次遍历每个URL会花费太多时间。

使用python,我可以做到以下并行这些任务:

from multiprocessing import Pool

def updateDB(ip):
     code goes here...

if __name__ == '__main__':
    pool = Pool(processes=4)              # process per core
    pool.map(updateDB, ip)

这工作得很好。但是,我试图找到如何在Django项目上做同样的事情。目前,我有一个遍历每个URL的函数(视图)以获取信息并更新数据库。

我唯一能找到的就是使用Celery,但这似乎对我想执行的简单任务有些强大。

我可以做些简单的事情还是必须使用芹菜吗?


问题答案:

目前,我有一个遍历每个URL的函数(视图)以获取信息并更新数据库。

这意味着响应时间对您而言并不重要,如果您将响应时间减少了4(使用4个子进程/线程),则可以在后台(异步地)执行响应时间,而不必在后台进行响应。如果是这种情况,您只需将示例代码放入视图中即可。喜欢

from multiprocessing import Pool

def updateDB(ip):
     code goes here...

def my_view(request):
    pool = Pool(processes=4)              # process per core
    pool.map(updateDB, ip)
    return HttpResponse("SUCCESS")

但是,如果要在后台异步执行此操作,则应使用Celery或遵循@BasicWolf的建议之一。