小编est*_*ani的帖子

如何在加载库时加快python启动和/或减少文件搜索?

我有一个框架,由在多用户环境中用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系统上的文件).

一个选项当然是拥有一个可以分叉的守护进程,但这远非"简单",而且是最后的解决方案.

谢谢阅读.

python startup

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

使用 continuation-local-storage 时如何解决承诺?

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 存储以适当的方式实现多租户?

javascript node.js promise continuation-local-storage

6
推荐指数
2
解决办法
1575
查看次数

如果使用格式化程序进行显示,如何在 bootstrap-vue 中对日期列进行排序?

我有一个带有日期对象的表,我将其转换为显示如下:

{
   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)

javascript vue.js bootstrap-vue

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

Python性能的条件评估

我试图找出在评估条件语句时否定布尔值是否有任何惩罚(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)

python performance

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

Python动态帮助和自动完成生成

我几乎有我想要的......

此动态对象使用动态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)

并且没有自动完成(我可以在运行中获得有效函数列表,并缓存它,因为该操作很昂贵)

我认为第一个是无法解决的,但我对第二个不太确定.想法?

python autocomplete docstring dynamic

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

如何查找容器的启动方式:“docker run”或“docker-compose up”?

当访问远程计算机时,我想知道容器是否是通过或其他方式启动docker rundocker-compose

这可能吗?

编辑:这样做的主要原因是要找出这些容器是在哪里编排的,即如果容器出现故障,是否会再次启动?该配置会在哪里?

containers docker docker-compose devops

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