小编Rob*_*ing的帖子

为什么从python子进程写入继承的文件句柄会导致并非所有行都被写入?

我有以下python程序,该程序启动三个进程,每个进程都使用继承的文件句柄将10000个随机行写入同一文件:

import multiprocessing
import random
import string
import traceback

if __name__ == '__main__':
  # clear out the file first
  open('out.txt', 'w')
  # initialise file handle to be inherited by sub-processes
  file_handle = open('out.txt', 'a', newline='', encoding='utf-8')
  process_count = 3

# routine to be run by sub-processes
# adds n lines to the file
def write_random_rows(n):
  try:
    letters = string.ascii_lowercase
    for _ in range(n):
      s = ''.join(random.choice(letters) for _ in range(100))
      file_handle.write(s+"\n")
  except Exception:
    traceback.print_exc()

if __name__ == '__main__':
  # initialise …
Run Code Online (Sandbox Code Playgroud)

python multiprocessing python-3.x

6
推荐指数
1
解决办法
85
查看次数

为什么实习全局字符串值会导致每个多处理进程使用更少的内存?

我有一个 Python 3.6 数据处理任务,它涉及预加载一个大字典,用于按 ID 查找日期,以便在多处理模块管理的子进程池的后续步骤中使用。这个过程占用了盒子上的大部分内存,所以我应用的一项优化是“实习”存储在字典中的字符串日期。正如我预期的那样,这将 dict 的内存占用减少了几个 GB,但它也产生了另一个意想不到的效果。

在应用实习之前,子进程在执行时会逐渐消耗越来越多的内存,我认为这是由于他们不得不将 dict 从全局内存逐渐复制到子进程的单独分配内存(这是运行Linux 等受益于 fork() 的写时复制行为。即使我没有更新子进程中的字典,看起来只读访问仍然可以通过引用计数触发写时复制

我只希望实习能减少 dict 的内存占用,但实际上它也阻止了内存使用量在子进程生命周期中逐渐增加

这是我能够构建的一个复制行为的最小示例,尽管它需要一个大文件来加载并填充 dict 以及在值中进行足够数量的重复以确保实习提供好处。

import multiprocessing
import sys

# initialise a large dict that will be visible to all processes
# that contains a lot of repeated values
global_map = dict()
with open(sys.argv[1], 'r', encoding='utf-8') as file:
  if len(sys.argv) > 2:
    print('interning is on')
  else:
    print('interning is off')
  for i, line in enumerate(file):
    if i > 30000000:
      break
    parts …
Run Code Online (Sandbox Code Playgroud)

python linux multiprocessing

6
推荐指数
1
解决办法
233
查看次数

如何在SQL Server 2016中现有的内存优化表上更改DURABILITY选项?

我想将SQL Server 2016中内存优化表的DURABILITY从SCHEMA_AND_DATA更改为SCHEMA_ONLY。

微软的文档表明,以下ALTER TABLE语句应该工作:

ALTER TABLE mem_opt_table
DURABILITY = SCHEMA_ONLY
Run Code Online (Sandbox Code Playgroud)

但是它给出了以下错误:

Msg 102, Level 15, State 1, Line 12
Incorrect syntax near 'DURABILITY'.
Run Code Online (Sandbox Code Playgroud)

更改桌子上的耐用性设置的正确语法是什么?我还缺少其他步骤吗?

sql-server memory-optimized-tables sql-server-2016

5
推荐指数
1
解决办法
135
查看次数

.NET Core TestServer 返回状态 200 而不是 404 以将请求发送到不存在的路径

我正在使用以下指南为 .NET Core 3.1 应用程序实施集成测试:https : //docs.microsoft.com/en-us/aspnet/core/test/integration-tests?view= aspnetcore-3.1 。这是我当前的测试类:

public class IntegrationTests : IClassFixture<WebApplicationFactory<main_app.Startup>>
{
    private readonly WebApplicationFactory<main_app.Startup> _factory;

    public TestTest(WebApplicationFactory<main_app.Startup> factory) {
        _factory = factory;
    }

    [Fact]
    public async void GetBogusPath() {
        var client = _factory.CreateClient();
        var response = await client.GetAsync("ofajspd");
        Assert.False(response.IsSuccessStatusCode);
    }

    [Fact]
    public async void PostBogusPath() {
        var client = _factory.CreateClient();
        var request_body = new StringContent("{}", Encoding.UTF8, "application/json");
        var response = await client.PostAsync("ofajspd", request_body);
        Assert.False(response.IsSuccessStatusCode);
    }
}
Run Code Online (Sandbox Code Playgroud)

get 请求测试按预期运行,因为它返回 404 状态代码。但是,即使路径不存在,发布请求也会返回 200 状态。什么可能导致此问题,我该如何解决?

如果我在本地运行服务器并手动在不存在的端点上触发 post 请求,它会按预期运行,因此问题仅限于这些集成测试。 …

.net c# xunit .net-core

5
推荐指数
1
解决办法
247
查看次数

读取时Perl DATA文件句柄为空

我有一个带有模板的Perl模块(由模块模块处理)存储在文件末尾的__DATA__和__END__关键字之间.尝试使用模板生成文件时,生成的文件为空,没有警告或错误输出.调试之后,我发现DATA文件句柄在传递给Template模块之前实际上是空的.

此模块的先前版本能够从DATA正确读取模板,但我所做的任何更改都不应影响此部分代码.这些更改包含完全独立函数中的逻辑更改,并将以下use语句添加到模块:

use DBI;
use DBI::Const::GetInfoType;
use Switch;
Run Code Online (Sandbox Code Playgroud)

我已经尝试在perl模块上添加写权限(它最初是只读的)并删除了__END__关键字,因为我发现这不是必需的.不幸的是,DATA文件句柄仍然显示为空.

什么样的问题可能导致DATA文件句柄为空,并且这些问题中的任何一个都适用于我的情况?我使用的是perl v5.12.5.

perl filehandle

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