django - Django:for循环遍历并行进程并存储值并在完成后返回
问题描述
我在 django 中有一个 for 循环。它将遍历一个列表并从数据库中获取相应的数据,然后根据数据库值进行一些计算,然后将其附加到另一个列表中
def getArrayList(request):
list_loop = [...set of values to loop through]
store_array = [...store values here from for loop]
for a in list_loop:
val_db = SomeModel.objects.filter(somefield=a).first()
result = perform calculation on val_db
store_array.append(result)
如果有 10,000 个条目,则列表。如果用户想要这个请求,他已经准备好等待,并且会被告知这需要时间
我试过它joblib
并backed=threading
没有比普通循环节省太多时间
但是当我尝试使用backend=multiprocessing
. 它说“应用程序尚未加载”
module
我读过基于文件的多处理是不可能的。
所以我现在正在看celery
。我不确定如何在芹菜中做到这一点。
任何人都可以指导我们如何使用可用的多重处理技术来加快 for 循环计算。
解决方案
你可以试试concurrent.futures.ProcessPoolExecutor
,这是一个处理cpu绑定任务的高级api
def perform_calculation(item):
pass
# specify number of workers(default: number of processors on your machine)
with concurrent.futures.ProcessPoolExecutor(max_workers=6) as executor:
res = executor.map(perform_calculation, tasks)
编辑
在IO
绑定操作的情况下,您可以利用ThreadPoolExecutor
并行打开几个连接,您可以将池包装在一个contextmanager
为您处理清理工作的池中(关闭空闲连接)。这是一个示例,但手动处理连接关闭。
推荐阅读
- haskell - 是否有可以用来深入挖掘多维地图的镜头/光学器件?
- android - 如何通过单击我的 Android 应用程序中的按钮来创建 Google 电子表格?
- java - 服务器错误 500:不存在任何值。在 Pivotal Cloud Foundry 上部署 Spring Boot
- google-apps-script - 从 Apps 脚本中的 URL 调用图像
- python - 打印数据框中有异常值的列
- wordpress - 如何从 Joomla 外部生成 Joomla 登录令牌
- sql - Top、Limit、Offset...我无法在 SQL Server 中显示寄存器
- python - 将 CNN 用于未塑造 NxM 的数据
- solr - 未能创建集合“techproducts”,原因是:创建集合时基础核心创建失败:techproducts
- elisp - 如何在 Emacs Lisp 中将对象转换为字符串,引用符号以便可以读回?