在 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() 从一些示例作业中计算出内存使用情况,自己估计分布,并使用固定上限。如果内存使用情况变化很大,那么这要么是危险的,要么是低效的。
如果我要并行化一个特定的函数,我只需对其进行分析即可完成。但是,对于我的应用程序,我不会提前知道该功能。
我不想重新发明这个轮子。所以,我的问题是:
joblib 是否支持此功能的任何部分?
还有其他(希望是简单的)工具吗?
如何在 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) 我正在从 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 …