小编Dus*_*rea的帖子

"资源暂时不可用"后的Python多处理池恢复

如果我在Python解释器中创建一个具有令人无法接受的大量进程的池,它显然会出现错误,但是在执行此操作之前看起来似乎没有清除分叉进程,因此会使环境变脏,并且系统的其余部分无法分叉进程.

>>> from multiprocessing import Pool
>>> p = Pool(1000)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/__init__.py", line 232, in Pool
    return Pool(processes, initializer, initargs, maxtasksperchild)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/pool.py", line 159, in __init__
    self._repopulate_pool()
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/pool.py", line 222, in _repopulate_pool
    w.start()
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/process.py", line 130, in start
    self._popen = Popen(self)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/forking.py", line 121, in __init__
    self.pid = os.fork()
OSError: [Errno 35] Resource temporarily unavailable

>>> p = Pool(1)
Traceback (most recent call last):
  File …
Run Code Online (Sandbox Code Playgroud)

python pool multiprocessing

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

EOFError与多处理管理器

我有一堆客户端通过0MQ连接到服务器。我有一个Manager队列,用于一个工作池,以便与每个客户端计算机上的主进程进行通信。

在仅一台具有250个工作进程的客户端计算机上,我几乎立即看到一堆EOFError。它们发生在执行put()的时刻。

我希望进行大量的通信可能会减慢一切,但是我永远都不会在内部多处理逻辑中看到EOFError。我没有使用gevent或任何可能破坏标准套接字功能的东西。

关于可以放入Manager队列的内容的任何想法都会引发EOFError?

python multiprocessing

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

查看已停止的Docker容器的输出

似乎没有办法查看已停止容器的屏幕输出(这在逻辑上是合理的,因为它需要运行才能轮询屏幕内容)。但是,如果您正在使用第三方图像进行清理,那么在无法访问屏幕输出的情况下如何调试启动失败?您可以将屏幕输出流式传输到文件吗?

docker

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

AppEngine/Go:使用新版本的Go和SDK

Go SDK目前附带的Go版本是1.6.2,但最新版本是1.7.1.我需要一些自1.6.2以来发布的增强/错误修正.但是,当我将包含Go 1.6.2的SDK目录中的goroot目录替换为指向1.7.1的符号链接时,我收到的错误与无法找到bin/goapp有关,这看起来像是特定于AppEngine且未在标准Go构建中提供.

有没有人知道如何升级AppEngine SDK中的Go?这是否意味着Go in production也是1.6.2?

google-app-engine go

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

在Python中使用ctypes的回调中的c_void_p参数

我是ctypes的常用用户,但我遇到了一些我无法解释的事情.

首先,当我使用c_void_p定义回调时,回调将接收一个扁平整数.

我看到其他一些帖子提到在使用c_void_p作为返回值时,在另一个POINTER中包装c_void_p.所以,我认为我可以在回调定义中为参数尝试这个:POINTER(c_void_p).现在,我在调用回调时得到一个指针,但我仍然不知道它是否指向值数据.

由于C_void_p指向具有二进制数据的缓冲区,我不相信我可以使用c_char_p.我使用我传递的长度转换为一个unsigned-chars数组,但是Python告诉我我有一个元组,并且没有我可以使用的"内容"或"值"属性.

建议?

python ctypes callback

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

有效地列出具有大量条目的目录中的文件

我需要递归地读取目录结构,但在读完每个目录的所有条目后,我还需要执行额外的步骤。因此,我需要编写自己的递归逻辑(并且不能使用简单的filepath.Walk例程)。但是,ioutil.ReadDirfilepath.Glob例程仅返回切片。如果我突破了ext4xfs的限制并且目录中的文件数量达到数十亿,该怎么办?我希望golangos.FileInfo有一个函数,可以通过通道返回一系列未排序的(或者更好的是原始字符串)而不是排序的切片。在这种情况下我们如何有效地读取文件条目呢?

上面引用的所有函数似乎都依赖于readdirnamesos /dir_unix.go,并且出于某种原因,它只是在看起来很容易生成 gothread并将值推入通道时创建一个数组。这样做可能有合理的逻辑,但尚不清楚它是什么。我是 Go 新手,所以我也可能很容易错过一些对其他人来说都很明显的原则。

为了方便起见,这是源代码:

func (f *File) readdirnames(n int) (names []string, err error) {
    // If this file has no dirinfo, create one.
    if f.dirinfo == nil {
        f.dirinfo = new(dirInfo)
        // The buffer must be at least a block long.
        f.dirinfo.buf = make([]byte, blockSize)
    }
    d := f.dirinfo

    size := n
    if size <= 0 {
        size = …
Run Code Online (Sandbox Code Playgroud)

go

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

去:贝塞尔功能

我注意到标准Go库(Y0)中定义了一阶,二阶和N阶贝塞尔函数(Y0,Y1,Yn)的函数.我似乎无法确定这些数学函数的实际应用,这些函数会使它们如此重要以至于包含在标准库中.

有人可以帮我吗?似乎贝塞尔斯(我之前没有听说过)与描述二次曲线的[渐变?]形状有关,但我不确定为什么这对于一般发展具有特殊的意义.

go bessel-functions

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

为什么使用 --single-branch 时 Git 无法解析远程分支?

因此,我们经常通过使用 --single-branch 有效克隆来优化克隆。但是,我们以后无法获得额外的分支。在管道方面,带有和不带有 --single-branch 的 git clone 有什么区别?稍后我们如何获取其他分支?

标准克隆:

$ git clone -b branch-name https://repo.url standard
$ cd standard
$ git checkout remote-branch
Branch 'remote-branch' set up to track remote branch 'remote-branch' from 'origin'.
Switched to a new branch 'remote-branch'
Run Code Online (Sandbox Code Playgroud)

单分支克隆:

$ git clone -b branch-name --single-branch https://repo.url singlebranch
$ cd singlebranch
$ git checkout remote-branch
error: pathspec 'remote-branch' did not match any file(s) known to git
Run Code Online (Sandbox Code Playgroud)

更新

根据下面@AndrewMarshall 的回答,您需要更新配置中的默认 fetch refspec。即使您可以绕过 fetch 来获取正确的提交,但如果您不先修复配置,您尝试的结帐将绝对拒绝了解有关该分支的任何信息:

$ git fetch origin +refs/heads/remote-branch:refs/remotes/origin/remote-branch
From …
Run Code Online (Sandbox Code Playgroud)

git

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

Groovy 中的闭包不捕获外部变量

在 Jenkins 管道的上下文中,我有一些 Groovy 代码,它枚举列表、创建闭包,然后使用闭包中的该值作为键来查找映射中的另一个值。这似乎几乎每次都充斥着某种异常或竞争条件。

这是代码的简化:

def tasks = [:]
for (platformName in platforms) {
  // ...

  tasks[platformName] = {
    def componentUploadPath = componentUploadPaths[platformName]

    echo "Uploading for platform [${platformName}] to [${componentUploadPath}]."

    // ...
}

tasks.failFast = true
parallel(tasks)
Run Code Online (Sandbox Code Playgroud)

platforms有两个值。我通常会看到两个迭代和两个注册的任务,并且输入的键tasks是正确的,但是闭包中的 echo 语句表明我们只是运行了一个平台两次:

14:20:02 [platform2] Uploading for platform [platform1] to [some_path/platform1].
14:20:02 [platform1] Uploading for platform [platform1] to [some_path/platform1].
Run Code Online (Sandbox Code Playgroud)

这很荒谬。

我需要添加什么或做不同的事情?

groovy jenkins jenkins-groovy jenkins-pipeline

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

从"subjectAltName"证书扩展中读取"otherName"值

看起来OpenSSL总是对subjectAltName为"otherName"显示"不支持".

写入的字符串(通过M2Crypto,直接通过命令行通过openssl.cnf):

1.2.3.4;UTF8:some other identifier
Run Code Online (Sandbox Code Playgroud)

转储(openssl x509 -in test.crt -noout -text):

                c3:88:36:93:82:58:0c:08:7f
            Exponent: 65537 (0x10001)
    X509v3 extensions:
        X509v3 Subject Alternative Name: 
            othername:<unsupported>
Signature Algorithm: sha1WithRSAEncryption
    05:76:d5:fc:d0:44:50:af:39:76:05:b4:cb:b6:99:9f:7c:c0:
Run Code Online (Sandbox Code Playgroud)

通过OpenSSL源代码"otherName",这对我来说很突出(在v3_alt.c中):

1:

STACK_OF(CONF_VALUE) *i2v_GENERAL_NAME(X509V3_EXT_METHOD *method,
                GENERAL_NAME *gen, STACK_OF(CONF_VALUE) *ret)
{
    unsigned char *p;
    char oline[256], htmp[5];
    int i;
    switch (gen->type)
    {
        case GEN_OTHERNAME:
        X509V3_add_value("othername","<unsupported>", &ret);
        break;

        case GEN_X400:
        X509V3_add_value("X400Name","<unsupported>", &ret);
        break;

        case GEN_EDIPARTY:
        X509V3_add_value("EdiPartyName","<unsupported>", &ret);
        break;
Run Code Online (Sandbox Code Playgroud)

2:

int GENERAL_NAME_print(BIO *out, GENERAL_NAME *gen)
{
    unsigned char *p;
    int i;
    switch (gen->type)
    {
        case GEN_OTHERNAME:
        BIO_printf(out, …
Run Code Online (Sandbox Code Playgroud)

openssl

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