如何在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的建议之一。