我有以下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 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) 我想将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)
更改桌子上的耐用性设置的正确语法是什么?我还缺少其他步骤吗?
我正在使用以下指南为 .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 请求,它会按预期运行,因此问题仅限于这些集成测试。 …
我有一个带有模板的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.
python ×2
.net ×1
.net-core ×1
c# ×1
filehandle ×1
linux ×1
perl ×1
python-3.x ×1
sql-server ×1
xunit ×1