小编eri*_*ich的帖子

Python中的浮点相等

我有一段代码的行为不同,这取决于我是否通过字典获取转换因子或我是否直接使用它们.

将打印以下代码 1.0 == 1.0 -> False

但是,如果你更换factors[units_from]10.0,并factors[units_to ]1.0 / 2.54它将打印1.0 == 1.0 -> True

#!/usr/bin/env python

base = 'cm'
factors = {
    'cm'        : 1.0,
    'mm'        : 10.0,
    'm'         : 0.01,
    'km'        : 1.0e-5,
    'in'        : 1.0 / 2.54,
    'ft'        : 1.0 / 2.54 / 12.0,
    'yd'        : 1.0 / 2.54 / 12.0 / 3.0,
    'mile'      : 1.0 / 2.54 / 12.0 / 5280,
    'lightyear' : 1.0 / 2.54 / …
Run Code Online (Sandbox Code Playgroud)

python floating-point equality

16
推荐指数
3
解决办法
2万
查看次数

Python利用多个处理器

让我们说我有一个很大的不同长度的音乐列表需要转换或不同大小的图像需要调整大小或类似的东西.顺序无关紧要,因此非常适合分割多个处理器.

如果我使用multiprocessing.Pool的map函数,似乎所有的工作都是提前划分的,并没有考虑到某些文件可能需要更长时间来完成其他工作的事实.

如果我有12个处理器......接近处理结束时,1或2个处理器将剩下2或3个文件处理,而其他可以使用的处理器闲置.

是否有某种队列实现可以保持所有处理器加载,直到没有剩下的工作要做?

python queue multithreading batch-file multiprocessing

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

在 nginxconf 中使用变量

这在我的 Nginx 配置中有效:

    # This works
    proxy_pass http://GitLab-CE:9080;
Run Code Online (Sandbox Code Playgroud)

...但这并不:

    # does not work
    set $upstream_gitlab GitLab-CE;
    proxy_pass http://$upstream_gitlab:9080;
Run Code Online (Sandbox Code Playgroud)

这是从使用连字符和不同端口的不同工作示例复制的。

    # this works
    set $upstream_deluge binhex-delugevpn;
    proxy_pass http://$upstream_deluge:8112;
Run Code Online (Sandbox Code Playgroud)

我想也许与破折号有关,但我有另一个配置,它的名称中也使用连字符(见上文)并且它有效。我尝试过各种形式的引用,但似乎都没有帮助。这里可能发生了什么?我很茫然。GitLab-CE 不起作用但 binhex-delugevpn 起作用是怎么回事?Nginx 是否看到 CE 有一些十六进制数学?

完整上下文:

# make sure that your dns has a cname set for gitlab and that your gitlab container is not using a base url

server {
    listen 443 ssl;
    listen [::]:443 ssl;

    server_name gitlab.*;

    include /config/nginx/ssl.conf;

    client_max_body_size 0;

    # enable for ldap auth, fill in ldap …
Run Code Online (Sandbox Code Playgroud)

nginx nginx-reverse-proxy nginx-config

9
推荐指数
0
解决办法
1万
查看次数

我可以在Python中使用带有Popen的已打开的gzip文件吗?

我有一个从stdin读取的命令行工具.在命令行上我会运行...

./foo < bar
Run Code Online (Sandbox Code Playgroud)

要么 ...

cat bar | ./foo
Run Code Online (Sandbox Code Playgroud)

使用gziped文件,我可以运行

zcat bar.gz | ./foo
Run Code Online (Sandbox Code Playgroud)

在Python我可以做...

Popen(["./foo", ], stdin=open('bar'), stdout=PIPE, stderr=PIPE)
Run Code Online (Sandbox Code Playgroud)

但我不能这样做

import gzip
Popen(["./foo", ], stdin=gzip.open('bar'), stdout=PIPE, stderr=PIPE)
Run Code Online (Sandbox Code Playgroud)

我最终不得不跑

p0 = Popen(["zcat", "bar"], stdout=PIPE, stderr=PIPE)
Popen(["./foo", ], stdin=p0.stdout, stdout=PIPE, stderr=PIPE)
Run Code Online (Sandbox Code Playgroud)

难道我做错了什么?为什么我不能使用gzip.open('bar')作为对Popen的stdin arg?

python scripting subprocess

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

从zipfile加载pickle文件

由于某种原因,我无法让cPickle.load处理ZipFile.open()返回的文件类型对象.如果我在ZipFile.open()返回的文件类型对象上调用read(),我可以使用cPickle.loads.

示例....

import zipfile
import cPickle

# the data we want to store
some_data = {1: 'one', 2: 'two', 3: 'three'}

#
# create a zipped pickle file
#
zf = zipfile.ZipFile('zipped_pickle.zip', 'w', zipfile.ZIP_DEFLATED)
zf.writestr('data.pkl', cPickle.dumps(some_data))
zf.close()

#
# cPickle.loads works
#
zf = zipfile.ZipFile('zipped_pickle.zip', 'r')
sd1 = cPickle.loads(zf.open('data.pkl').read())
zf.close()

#
# cPickle.load doesn't work
#
zf = zipfile.ZipFile('zipped_pickle.zip', 'r')
sd2 = cPickle.load(zf.open('data.pkl'))
zf.close()
Run Code Online (Sandbox Code Playgroud)

注意:我不想仅仅压缩pickle文件,而是压缩其他类型的许多文件.这只是一个例子.

python pickle zipfile

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

bash PS1中的动态元素

我在〜/ .localsh文件中添加了以下内容,以便在使用git时自定义我的bash提示符.

基本上我想让我的终端显示当前分支.gitk工具显示带有绿色背景和黑色前景的分支,这就是我正在尝试做的事情.

我的工作原理,但是当我按下键盘上的向上箭头以回滚以前的命令时,它会被覆盖.

这个东西碰巧发生在你没有用[\ e [0m]结束颜色序列的时候.现在,由于调用了getgitbranch函数,它正在发生在我身上.我认为它与终端有关,不知道提示有多长.

接下来的问题是......如何在我的bash提示中正确使用动态元素,而不是在使用向上箭头时使用动态元素?

function getgitbranch()
{
git branch | grep "^\*" | cut -c3-
}

function blabla()
{
PS1=""
PS1="$PS1\[\e[0;30m\]\[\e[42m\]\[\$(getgitbranch)\]\[\e[0;49m\]\[\e[0m\] "
PS1="$PS1\[\e[1;35m\][\[\e[0m\]"
PS1="$PS1\[\e[1;33m\]\w\[\e[0m\]"
PS1="$PS1\[\e[1;35m\]]\[\e[0m\]"
PS1="$PS1 \[\e[1;31m\]>\[\e[0m\] "
export PS1
}
Run Code Online (Sandbox Code Playgroud)

git bash prompt ps1

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

multiprocessing.Queue 的工作示例

在从这个问题指向它之后,我正在寻找 multiprocessing.Queue 的一个工作示例:Python using multiple processor

我遇到了这个问题,但即使我更改,它似乎也只使用我的 12 个处理器之一num_processes=12。我也改变了,num_jobs = 200000所以它不会那么快完成。

有人可以告诉我那个例子有什么问题,或者给我指出一个有效的例子吗?

python queue multithreading multiprocessing

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

在Python中包装生成器函数

我正在编写一些遍历可能具有循环引用的结构的代码.我没有在递归函数的开头显式地进行检查,而是认为我会创建一个装饰器,它不允许使用相同的参数多次调用函数.

以下是我提出的建议.在编写时,这将尝试迭代Nonetype并引发异常.我知道我可以通过返回说出一个空列表来修复它,但我想要更优雅.有没有办法从装饰器内判断被装饰的函数是否是生成函数?这样我可以有条件地提高StopIteration,如果它是一个生成器,或者只返回None否则.

previous = set()
def NO_DUPLICATE_CALLS(func):
    def wrapped(*args, **kwargs):
        if args in previous:
            print 'skipping previous call to %s with args %s %s' % (func.func_name, repr(args), repr(kwargs))
            return
        else:
            ret = func(*args, **kwargs)
            previous.add(args)
            return ret
    return wrapped

@NO_DUPLICATE_CALLS
def foo(x):
    for y in x:
        yield y

for f in foo('Hello'):
    print f

for f in foo('Hello'):
    print f
Run Code Online (Sandbox Code Playgroud)

python generator decorator

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

我可以将argv从main传递给execv吗?

execv()函数需要一个NULL终止字符串数组,但不接受参数数量.它使用标记值(NULL指针)来确定数组何时结束.

execv()各州的手册页......

按照惯例,第一个参数应指向与正在执行的文件关联的文件名.指针数组必须由NULL指针终止.

......所以我的问题是......

我想通过argvmain()execv().

我能确定进入main的argv是由NULL指针终止的吗?也就是说,我可以放心,argv[argc] == NULL还是我分配我自己的char*尺寸阵列argc+ 1,并把NULLargc指数?

如果我可以放心,它是否在某处记录?

谢谢,〜埃里克

c program-entry-point setuid exec argv

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

使用带有字符指针的RAII

我看到很多RAII示例类包装文件句柄.

我试图在没有运气的情况下将这些示例适用于字符指针.

我正在使用的库具有获取字符指针地址的函数(声明为get_me_a_string(char**x)).这些函数为该字符指针分配内存,并将其留给库的最终用户,以便在自己的代码中清理它.

所以,我的代码看起来像这样......

char* a = NULL;
char* b = NULL;
char* c = NULL;

get_me_a_string(&a);
if(a == NULL){
    return;
}


get_me_a_beer(&b);
if(b == NULL){
    if(a != NULL){
        free(a);
    }
    return;
}


get_me_something(&c);
if(c == NULL){
    if(a != NULL){
        free(a);
    }
    if(b != NULL){
        free(b);
    }
    return;
}

if(a != NULL){
    free(a);
}
if(b != NULL){
    free(b);
}
if(a != NULL){
    free(b);
}
Run Code Online (Sandbox Code Playgroud)

听起来RAII就是我上面这个烂摊子的答案.有人可以提供一个简单的C++类来包装char*而不是FILE*吗?

谢谢

c++ memory-management raii resource-management

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

在Visual Studio输出窗口中1>是什么意思?

我在Visual Studio 2005中输出窗口的每一行都加上字符"1>"

我不知道发生了什么,但它不习惯这样做.

我已经尝试搜索Google但是搜索字符串"1>"即使您搜索+1>也是有问题的(因为+应该是指精确搜索).

那么,这意味着什么呢?......我该如何摆脱它?

谢谢,〜埃里克

visual-studio

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

请参阅Makefile中的shell脚本输出

如何在Makefile中构建目标之前执行shell脚本,并在运行时查看输出?

我有一个调用的脚本prepare.sh生成一堆.pyx文件..pyx文件是我的构建过程涉及make的起点.它来自.pyx - > .c - > .o - > .so

我不喜欢在make之前单独运行prepare.sh.我想让它为我运行它.

我让它工作,但我没有看到命令的输出.我想看看它.这就是我现在拥有的:

PATH := ${PYTHONHOME}/bin:${PATH}

NOTHING:=$(shell ./prepare.sh)

PYXS?=$(wildcard merged/*.pyx)
SOURCES=$(PYXS:.pyx=.c)
OBJECTS=$(SOURCES:.c=.o)
SOBJECTS=$(OBJECTS:.o=.so)
Run Code Online (Sandbox Code Playgroud)

makefile gnu-make

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

popen() 的安全版本?

当命令将用户输入作为其某些参数时,我使用 fork()/exec()/wait() 而不是 system(),因此用户不能输入类似...

&rm -rf /home/* && echo HAHA
Run Code Online (Sandbox Code Playgroud)

...作为一个论点。

我假设 popen 与 system() 一样危险,因为它需要单个字符串,而不是像 exec 系列函数那样需要字符串列表。

不过,我只能从 exec 函数获取返回值。是否有一个“安全”版本的 popen,我可以使用用户输入运行并在父进程中处理 stdout / stderr ?

c fork subprocess pipe process

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