我发誓我前段时间在某处看到过这个讨论,但我再也找不到这个了。
想象一下我有这个方法:
def my_method():
df = pd.DataFrame({'val': np.random.randint(0, 1000, 1000000)})
return df[df['val'] == 1]
Run Code Online (Sandbox Code Playgroud)
自从我决定不这样做以来已经有一段时间了,因为该方法可能会返回一个视图(这不是确定的,取决于 pandas 想要做什么)而不是一个新的数据帧。
我读到的问题是,如果返回一个视图,原始数据帧中的引用计数不会减少,因为即使我们只使用了一小部分数据,它仍在引用旧数据帧。
我被建议改为执行以下操作:
def my_method():
df = pd.DataFrame({'val': np.random.randint(0, 1000, 1000000)})
return df.drop(df[df["val"] != 1].index)
Run Code Online (Sandbox Code Playgroud)
在这种情况下,drop 方法仅使用我们想要保留的数据创建一个新的数据帧,一旦该方法完成,原始数据帧中的引用计数将被设置为零,使其容易受到垃圾收集并最终释放内存。
总而言之,这将更加内存友好,并且还将确保该方法的结果是一个数据帧,而不是一个数据帧的视图,这会导致settingOnCopyWarning我们都喜欢。
这仍然是真的吗?或者是我在某处误读了什么?我试图检查这是否对内存使用有一些好处,但考虑到我无法控制 gc 何时决定从内存中“删除”东西,只是要求它收集东西......我似乎从来没有任何结论性的结果。
很抱歉,如果之前已经询问过,我不确定如何搜索它,我搜索的内容不会产生任何有用的答案.
这是我的问题,我有一个框架,基本上管理将提交到PBS集群的作业,每个作业都需要从输入文件中读取.我们处于这样一种情况,即我们有超过5k个需要运行的作业,并且有批次,比如说,从不同的文件中读取的〜30个,但其余的从另一个作业正在读取的文件中读取.
这可以很容易地处理(尽管不是最好的解决方案,也许是我们所拥有的时间刻度中最快的一个),因为它能够通过ID对作业列表进行排序,这基本上意味着它将从哪个文件读取,即我会喜欢这样排序一个数组
a = [1,1,1,2,2,2,3,3,3,4,4,4]
Run Code Online (Sandbox Code Playgroud)
成
a = [1,2,3,4,1,2,3,4,1,2,3,4]
Run Code Online (Sandbox Code Playgroud)
有没有办法在红宝石中实现这样的排序?我可以想到一个算法购买可能它已经完成,有人知道答案.
谢谢!
对不起,如果这已经得到解答,但我找不到任何可能的解决方法.
考虑这个课程
class NPALog{
public:
NPALog();
~NPALog();
void error(char* message);
void warning(char* message);
void log(char* message);
void setOutput(char* fileName);
std::ofstream getLogBuffer(){return *m_logOutputFile;};
std::ofstream getErrorBuffer(){return *m_errorOutputFile;};
private:
char* m_fileName;
std::ofstream *m_logOutputFile;
std::ofstream *m_errorOutputFile;
};
Run Code Online (Sandbox Code Playgroud)
当我尝试编译它时,我在getLogBuffer函数中有这个错误:
call to implicitly-deleted copy constructor of 'std::ofstream' (aka 'basic_ofstream<char>')
Run Code Online (Sandbox Code Playgroud)
我对复制构造函数的了解不多,但我唯一想做的就是使用指针,这些指针允许我稍后轻松定义每个流,如果用户想要使用它,则返回缓冲区本身.
你知道这里有什么问题吗?有关如何做得更好的任何想法?
非常感谢提前.
我对RSpec很新,虽然我已经阅读了很多关于如何检查方法是否已被调用但我无法找到适合我所需案例的解决方案.很抱歉,如果这是重复但无法找到任何内容:S
我有一个实现此功能的对象
def link
paths.each do |old,new|
FileUtils.ln_s old, new
end
end
Run Code Online (Sandbox Code Playgroud)
基于路径(这是对新旧文件进行哈希配对)完成了几个链接.我的测试看起来像这样:
context "linking files to new ones" do
it "links a sample to the propper file" do
@comb.link
expect(FileUtils).to have_received(:ln_s).with("/example/path/files/old.root",
"example/path/nornmfiles/new.root")
end
end
Run Code Online (Sandbox Code Playgroud)
因为我想测试至少在它们被调用时必须使用该have_received方法,因为一旦ln_s使用不同的参数调用方法,接收的方法就会失败.问题是测试失败,因为这是一个测试,我真的要创建链接,因为文件不存在因此它不能引发异常,因为文件不存在.
如何在不实际调用方法的情况下测试它?
一旦进行不同的呼叫,该呼叫也会失败
it "links a sample with a region subpath to the propper file" do
expect(FileUtils).to receive(:ln_s).with("/example/path/files/pathsuff/old.root",
"/example/path/normfiles/pathsuff/new.root").at_least(:once)
@comb.link
end
Run Code Online (Sandbox Code Playgroud)
它给出了这个错误:
RSpec::Mocks::MockExpectationError: FileUtils received :ln_s with unexpected
arguments
expected: ("/example/path/files/pathsuff/old.root",
"/example/path/normfiles/pathsuff/new.root")
got: ("/example/path/files/old.root",
"/example/path/normfiles/new.root")
Run Code Online (Sandbox Code Playgroud)
这是可以调用的可能发生的其他调用的其他调用
我一直在寻找如何做到这一点一段时间,但我开始认为这是不可能的。与此类似的每个问题似乎都与限制某些节点或整个管道的运行更相关。
我们在 Jenkins 中有一个多分支管道,用于处理 PR 构建、分阶段测试和生产发布。这三个阶段中的每一个都通过when每个阶段中的选项进行处理,因为区别在于是否运行某些阶段。
虽然我希望能够对 PR 进行并发构建,因为我们可以打开许多需要更新的 PR,但我们希望限制登台测试的并发执行数量,因为我们需要一次执行一次登台运行才能能够以正确控制它。
在之前的版本中,我们有几个不同的管道来处理每个场景,但我们正在将其更新为只有一个多分支管道,并根据正在考虑的分支运行一个或另一个场景。在之前的版本中,我们使用了disableConcurrentBuilds()用于登台测试构建,并且它工作得很好,但是使用此选项,我们现在看到整个管道一次只运行一个构建,这使得完成 PR 构建变得非常慢。如果 PR 构建正在运行,由于不能并发运行,其余 PR 只会等待它完成,以便下一个 PR 可以开始运行。
有没有一种方法可以限制某些分支或每个分支的并发构建数量?这将允许我们仅对运行暂存测试的分支禁用此功能,同时仍然能够对打开的 PR 同时运行。
谢谢!