我有一个框架,由在多用户环境中用python编写的不同工具组成.
我第一次登录系统并启动一个命令只需要6秒钟就可以显示一些帮助.如果我立即再次发出相同的命令则需要0.1秒.几分钟后,它又恢复到6秒.(短期缓存的证明)
系统位于GPFS上,因此磁盘吞吐量应该没问题,但由于系统中的文件数量较多,访问可能会很少.
strace -e open python tool | wc -l
Run Code Online (Sandbox Code Playgroud)
显示启动工具时正在访问的2154个文件.
strace -e open python tool | grep ENOENT | wc -l
Run Code Online (Sandbox Code Playgroud)
显示1945个丢失的文件正在查找中.(一个非常糟糕的命中/错过率你问我:-)
我有一种预感,即通过向GPFS查询所有这些文件来消耗加载工具所花费的时间过长,并且这些文件被缓存用于下一次调用(在系统或GPFS级别),尽管我不知道如何测试/证明给我看.我没有对系统的root访问权限,我只能写入GPFS和/ tmp.
有可能改善这个python quest for missing files
吗?
如何以简单的方式测试这个?(重新安装/ tmp上的所有内容并不简单,因为涉及很多软件包,virtualenv也无济于事(我认为),因为它只是链接gpfs系统上的文件).
一个选项当然是拥有一个可以分叉的守护进程,但这远非"简单",而且是最后的解决方案.
谢谢阅读.
continuation-local-storage
似乎被使用,也在快递的上下文中。
然而,非常基本的用法对我不起作用,因为上下文完全丢失了!
var createNamespace = require('continuation-local-storage').createNamespace;
var session = createNamespace('my session');
async function doAsync() {
console.log('Before getting into the promise: ' + session.get('test'));
await Promise.resolve();
console.log('*in* the promise: ' + session.get('test'));
}
session.run(() => {
session.set('test', 'peekaboo');
doAsync();
});
Run Code Online (Sandbox Code Playgroud)
结果是:
$ node server_test.js
Before getting into the promise: peekaboo
*in* the promise: undefined
Run Code Online (Sandbox Code Playgroud)
我做错了什么还是 CLS 只是坏了?还是图书馆坏了?如果不打算使用 promise,是否还有其他概念可以作为 threadLocal 存储以适当的方式实现多租户?
我有一个带有日期对象的表,我将其转换为显示如下:
{
key: "date",
formatter: (value, key, item) => {
return moment(value).format("L");
},
sortable: true
}
Run Code Online (Sandbox Code Playgroud)
这打破了排序功能,因为 是一个本地化的字符串。我想做类似的事情
sortingKey: value=>value
Run Code Online (Sandbox Code Playgroud)
要覆盖呈现日期的字符串排序并返回按日期排序,但我找不到类似的东西。
更新:这已经解决了,但对我来说解决方案并不漂亮。一个更漂亮的解决方案是:
field: {
key: 'date',
sorter: (value, item, fieldMeta) => {
// returns something that reacts to <
// key == fieldMeta.key
// default (current) implementation
return fieldMeta.formatter ? fieldMeta.formatter(value, fieldMeta.key, item) : value;
}
Run Code Online (Sandbox Code Playgroud) 我试图找出在评估条件语句时否定布尔值是否有任何惩罚(python 2.6.6).我第一次尝试这个简单的测试(没有else
分支)
>>> import timeit
>>> timeit.timeit("if not True: pass", number=100000)
0.011913061141967773
>>> timeit.timeit("if True: pass", number=100000)
0.018882036209106445
Run Code Online (Sandbox Code Playgroud)
所以我虽然结果偏向,因为pass语句可能被转换为noop,这至少是一些操作.
我做了第二次尝试并得到了这些结果:
>>> timeit.timeit("a=False\nif not a: pass\nelse: pass", number=100000)
0.02387714385986328
>>> timeit.timeit("a=False\nif a: pass\nelse: pass", number=100000)
0.015386819839477539
>>> timeit.timeit("a=True\nif a: pass\nelse: pass", number=100000)
0.02389812469482422
>>> timeit.timeit("a=True\nif not a: pass\nelse: pass", number=100000)
0.015424966812133789
Run Code Online (Sandbox Code Playgroud)
我没想到会看到任何大的惩罚,但从这个结果来看,评估else
分支看起来比隐式then
分支便宜.差别很大!
所以第三次尝试返回这些结果:
>>> timeit.timeit("if True: a=1\nelse: a=1", number=100000)
0.022008895874023438
>>> timeit.timeit("if not True: a=1\nelse: a=1", number=100000)
0.022121906280517578
Run Code Online (Sandbox Code Playgroud)
最后我得到了预期的结果.出于好奇,我最后一次尝试:
>>> timeit.timeit("if False: a=1\nelse: …
Run Code Online (Sandbox Code Playgroud) 我几乎有我想要的......
此动态对象使用动态docstring生成封装通用函数调用:
def add_docs(tool):
def desc(func):
func.__doc__ = "Showing help for %s()" % tool
return func
return desc
class Dynamic(object):
def __getattr__(self, value):
@add_docs(value)
def mutable_f(*args, **kwargs):
print "Calling:", value
print "With arguments:", args, kwargs
return mutable_f
Run Code Online (Sandbox Code Playgroud)
它按预期工作:
>>> Dynamic().test(1, input='file')
Calling: test
With arguments: (1,) {'input': 'file'}
>>> Dynamic().test.__doc__
'Showing help for test()'
Run Code Online (Sandbox Code Playgroud)
唯一的两个问题是帮助显示mutable_f
签名
>>> help(Dynamic().test)
Help on function mutable_f in module __main__:
mutable_f(*args, **kwargs)
Showing help for test()
(END)
Run Code Online (Sandbox Code Playgroud)
并且没有自动完成(我可以在运行中获得有效函数列表,并缓存它,因为该操作很昂贵)
我认为第一个是无法解决的,但我对第二个不太确定.想法?
当访问远程计算机时,我想知道容器是否是通过或其他方式启动docker run
的docker-compose
。
这可能吗?
编辑:这样做的主要原因是要找出这些容器是在哪里编排的,即如果容器出现故障,是否会再次启动?该配置会在哪里?
python ×3
javascript ×2
autocomplete ×1
containers ×1
devops ×1
docker ×1
docstring ×1
dynamic ×1
node.js ×1
performance ×1
promise ×1
startup ×1
vue.js ×1