小编Jan*_*nga的帖子

Joblib 和内存限制并行化

在 Python 中,joblib提供了一个非常好的工具来执行令人尴尬的并行执行。我对此有点陌生,我正在尝试找出如何处理可能受内存限制的工作。

例如,请考虑以下情况:

from joblib import Parallel, delayed
import numpy as np

num_workers=8
num_jobs=100
memory_range=1000

def my_function(x):
    np.random.seed(x)
    array_length=(np.random.randint(memory_range)+1)**3
    big_list_of_numbers=np.random.uniform(array_length)
    return(np.sum(big_list_of_numbers))

results=Parallel(n_jobs=num_workers)(delayed(my_function)(i) for i in range(num_jobs))
Run Code Online (Sandbox Code Playgroud)

每个作业的内存使用量可能从几百字节到大约 0.8 GB 不等。

在完美的世界中,我想给 joblib 一些总内存预算(例如“我希望 99% 确定所有工作进程的总内存使用量小于 8GB”),让 joblib 估计各个工作进程的内存使用量分布到目前为止它已经看到的作业,并使用它来动态调整工作池的大小。

不幸的是,似乎(?)当您调用 Parallel() 时,活动工作线程的数量是静态确定的。如果是这种情况,我可以使用 resource.getrusage() 从一些示例作业中计算出内存使用情况,自己估计分布,并使用固定上限。如果内存使用情况变化很大,那么这要么是危险的,要么是低效的。

如果我要并行化一个特定的函数,我只需对其进行分析即可完成。但是,对于我的应用程序,我不会提前知道该功能。

我不想重新发明这个轮子。所以,我的问题是:

  1. joblib 是否支持此功能的任何部分?

  2. 还有其他(希望是简单的)工具吗?

python memory parallel-processing joblib

7
推荐指数
0
解决办法
575
查看次数

如何在 Shapely 中对多边形进行三角剖分?

如何在 Shapely 中对多边形进行三角剖分?Shapely 实际上提供了triangulate()函数,但它仅将多边形的顶点三角化为点集。对于凸多边形,解决方案是相同的,但对于非凸多边形,您会得到额外的三角形。我尝试删除多边形外部的所有三角形,但有时三角形可以跨越多边形边界(见下图)。我想我也可以删除这些,然后从多边形中减去剩余的三角形,并递归地对该差异的分量进行三角测量。但有没有更简单的方法呢?

多边形三角剖分不是顶点三角剖分的子集的示例(多边形边界更宽且灰色,三角形边界更暗且更细): 多边形三角剖分不是顶点三角剖分的子集的示例(多边形边界更宽且灰色,三角形边界更暗且更细) 生成此几何图形的代码:

from shapely.geometry import Polygon
from shapely.ops import triangulate

polygon = Polygon( [ (0,0), (0,3), (5,3), (2,4), (6,4), (6,0) ])
delauney=triangulate(polygon)
Run Code Online (Sandbox Code Playgroud)

python triangulation shapely

7
推荐指数
1
解决办法
6172
查看次数

Windows:rsync 在 msys 中工作,但在 cygwin 中不工作(git bash)

我正在从 Windows 10 盒子连接到 Linux 系统。我并行使用 msys 和 git bash。我想使用 rsync 同步 Linux 机器上的文件。目前它可以在 msys 中运行,但不能在 git bash 中运行。

我希望它能在 git bash 中工作,因为并行使用两者很尴尬。我选择 git bash 而不是 msys,因为我的团队无论如何都需要 git。我的团队成员也应该使用我正在编写的脚本,他们不知道 msys,但知道 git bash。

我正在使用的命令是

rsync -iru -e ssh $(ls -d [^O]*) "advanced@$ip:/home/user/"
Run Code Online (Sandbox Code Playgroud)

在 msys 中这是有效的。在 git bash 中我收到错误消息。

dup() in/out/err failed
rsync: read error: Connection reset by peer (104)
rsync error: error in rsync protocol data stream (code 12) at /usr/src/rsync/rsync-3.0.8/io.c(760) [sender=3.0.8]
Run Code Online (Sandbox Code Playgroud)

(本地 rsync 版本是 3.0.8,msys 和 git bash 使用相同的二进制文件。)

我知道 msys …

ssh rsync cygwin msys git-bash

5
推荐指数
0
解决办法
1362
查看次数