小编Hep*_*tus的帖子

在Python中检测*可用*CPU数量的便携方式

根据这个问题和答案 - Python multiprocessing.cpu_count()在4核Nvidia Jetson TK1上返回'1' - Python multiprocessing.cpu_count()在某些系统上的功能输出反映了主动使用的CPU数量,而不是CPU的数量实际上可以通过调用Python程序使用.

一个常见的Python习惯用法是使用return-value cpu_count()来初始化a中的进程数Pool.但是,在使用这种"动态CPU激活"策略的系统上,该习惯用法相当严重(至少在相对静止的系统上).

是否有一些直接(和可移植)方式来获取Python 可用处理器的数量(与当前使用的数量相反)?

笔记:

  1. 这个问题是不被接受的答案来回答如何找出使用python CPU的数量,因为在上方挂了一个问题,说明这个问题,打印的内容/proc/self/status显示所有4个内核为可用的程序.

  2. 在我看来,"可移植"排除了涉及解析内容的任何方法/proc/self/status,其格式可能因Linux的发行版本而异,并且在OS X上甚至不存在.(对于任何其他伪文件也是如此,同样.)

python cpu

24
推荐指数
2
解决办法
2808
查看次数

Python multiprocessing.cpu_count()在4核Nvidia Jetson TK1上返回'1'

任何人都可以告诉我为什么Python的multiprocessing.cpu_count()功能会1在调用带有四个ARMv7处理器的Jetson TK1时返回?

>>> import multiprocessing
>>> multiprocessing.cpu_count()
1
Run Code Online (Sandbox Code Playgroud)

Jetson TK1开发板或多或少都是开箱即用的,没有人与cpusets混淆.在同一个Python shell中,我可以打印内容,/proc/self/status它告诉我该进程应该可以访问所有四个核心:

>>> print open('/proc/self/status').read()
----- (snip) -----
Cpus_allowed:   f
Cpus_allowed_list:      0-3
----- (snip) -----
Run Code Online (Sandbox Code Playgroud)

还有什么可能导致这种行为cpu_count()

编辑:

为了测试Klaus的假设,我使用以下代码来运行一个非常简单的实验:

import multiprocessing

def f(x):
    n = 0
    for i in xrange(10000):
        n = max(n, multiprocessing.cpu_count())
    return n

p = multiprocessing.Pool(5)
for i in range(10):
    print p.map(f, [1,2,3,4,5])
Run Code Online (Sandbox Code Playgroud)

其中产生了以下输出:

[3, 3, 3, 3, 1]
[4, 3, 3, 3, 3]
[4, 3, 3, 3, 3]
[3, 3, …
Run Code Online (Sandbox Code Playgroud)

python cpu python-multiprocessing

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

go-git:创建本地分支的正确方法,模拟“git分支 <branchname>”的行为?

正如标题所示,我试图弄清楚如何使用go-git与 Git CLI 命令给出相同结果的方式创建本地分支git branch <branchname>

据我所知,git branch <branchname>(没有明确的<start-point>论证)做了两件事:

  1. 创建.git/refs/heads/<branchname>指向当前HEAD提交
  2. .git/logs/refs/heads/<branchname>使用一行记录分支的创建进行创建。

它可能会做更多的事情,但我知道它肯定会做这两件事。(如果你知道更多它的作用,请分享!)

接下来的大部分内容记录了我在研究我的选择时的发现之旅,我想我现在可能已经掌握了上面的#1。不过,对于#2,我开始认为我可能是 SOL,至少使用go-git.

第一个想法:Repository.CreateBranch

我最初天真的想法是直接打电话Repository.CreateBranch,并且有一个类似的 SO 问题的答案(“如何使用 go-git 检查新的本地分支?”),这似乎为这个想法提供了可信度。但一旦我开始研究细节,事情就变得非常混乱。

首先,Repository.CreateBranch采用 aconfig.Config作为输入(为什么?),并且似乎还修改了存储库的.git/config文件(同样,为什么?)。我已经验证该git branch <branchname>命令不会触及存储库的配置,并且当我调用该命令时,我当然不需要提及有关配置的任何内容。

其次,我上面链接的 SO 答案引用了 中的代码,go-gitrepository_test.go代码执行以下操作:

r, _ := Init(memory.NewStorage(), nil) // init repo
testBranch := &config.Branch{
    Name:   "foo",
    Remote: "origin",
    Merge:  "refs/heads/foo",
}
err …
Run Code Online (Sandbox Code Playgroud)

git go go-git

9
推荐指数
2
解决办法
4846
查看次数

input type ="submit",onclick处理程序调用this.form.submit(),并且不返回任何值

编辑:在考虑回答之前,请仔细阅读问题.我不是在询问在生产代码中使用内联事件处理程序的可行性,也不是在询问实现我引用的文章所承诺的结果的最佳方法.这是一个关于Javascript语义和浏览器实现细节的问题,而不是关于最佳编码实践的问题.

谢谢.

听起来像是一场噩梦,对吧?

然而,我发现了一些在线建议,主张做这样的事情以防止双重提交表单:

<input type="submit" 
       onclick="this.disabled=true;
                this.value='Sending, please wait...';
                this.form.submit();" />
Run Code Online (Sandbox Code Playgroud)

暂且不讨论内联事件处理程序的邪恶,我在这里看到的问题是:

  1. 标签的类型是"submit",因此提交其包含的表单是其默认行为;
  2. onclick处理程序明确地提交含有表
  3. onclick处理器不返回false,防止默认行为(参见图1).

直观地说,我认为点击这个项目会与文章所声称的完全相反 - 即,提交表单两次,一次作为显式submit()调用的结果,然后再次作为未抑制的默认行为"submit" - 控制.

另一方面,我写了一个小的PHP脚本(下面),并尝试使用Firefox和Safari(目前我唯一方便的浏览器),它只在按钮上每次点击写入一个日志条目:

<html>
<head></head>
<body>
<?php
  if (isset($_GET['action']) && $_GET['action'] == 'submit') {
    $s = 'Got form submission at ' . time();
    error_log($s);
    echo $s;
  }
  else {
?>
  <form action="http://localhost/~hephaestus/phptests/submittest.php?action=submit" 
        method="post">
    <input type="submit" 
           onclick="this.disabled=true;
                    this.value='Sending, please wait...';
                    this.form.submit();" />
  </form>
<?php …
Run Code Online (Sandbox Code Playgroud)

javascript cross-browser submit dom-events

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

Stripe:“charge.succeeded”webhook 未针对连接的帐户触发。事件类型名称错误?

我认为,在详细讨论以下细节之前,我真正应该问的一个基本问题可能是:

作为拥有已连接到平台帐户的独立 Stripe 帐户的供应商/服务提供商,我是否可以设置一个 Webhook,当平台代表我成功收费时将调用该 Webhook?

无论如何,这就是我想要做的,通过在收件人帐户上设置的 Webhook,将其配置为针对以下任何事件进行调用:

在此输入图像描述

从我的仪表板测试调用 Webhook 会使其按预期触发。

但是,当我通过平台创建费用并设置destination引用连接的帐户时,网络钩子不会触发 - 即使在连接的帐户中成功创建费用以及伴随的事件。

一个重要的线索——我不知道如何解释——是仪表板的“事件和 Webhooks”选项卡中显示的事件类型不是或者charge.succeeded——charge.captured它是payment.created(!)。

但:

  • Webhook 配置菜单中没有列出具有该名称的事件类型;
  • 据我所知,API也没有定义payment对象类型(事实上,事件中引用的对象的类型是charge):

在此输入图像描述

所以:

这是否只是 Stripe 需要修复的 API 实现中的一个命名问题?

或者,在我拥有的连接的独立帐户上设置 Webhook 的想法是否存在一些我无法理解的更根本的问题?

(或者我只是做错了?)

webhooks stripe-payments

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

Flask:蓝图中的模板从应用程序中的模板继承?

我是一个完全的 Flask/Jinja2 新手,所以也许我忽略了一些明显的东西,但是:

开箱即用的 Flask 是否应该允许存在于蓝图templates/文件夹中的模板扩展由我的应用程序templates/文件夹定义的基本模板?即使蓝图还包含一个“默认”基本模板,我通过定义自己的同名基本模板来覆盖它,这不应该工作吗?

另一个 SO 问题的答案让我认为这两件事绝对应该如此。特别是答案的一部分:

如果应用程序的模板文件夹中有两个同名的模板[,一个] 和蓝图的模板文件夹中的[另一个],则应用程序模板文件夹中的模板将获得优先权。

但这对我来说根本不起作用。事实上,它似乎工作的相反的方式,即base.html蓝图正由我的应用程序定义的页面拉,即使我的应用程序定义了自己的base.html(这应该“得到优先权”如果以上的答案是正确的)。

在我的应用程序中,我有:

myapp/
   templates/
       base.html
       pages/
           page_base.html
           home_page.html
Run Code Online (Sandbox Code Playgroud)

其中pages/home_pageextends pages/page_base,反过来extends base

我也在使用flask_user来自 PyPI的包,它是安装pip/usr/local/lib/python2.7/dist-packages/flask_user/. 其模板文件夹排列如下:

flask_user/
    templates/
        base.html
        flask_user/
            [templates that extend base.html]
Run Code Online (Sandbox Code Playgroud)

该包通过在init_appUserManager类的函数(__init__.py第 154 行)中通过以下调用建立的蓝图将其模板提供给使用它的应用程序:

    # Add flask_user/templates directory using a Blueprint                  
    blueprint = Blueprint('flask_user', 'flask_user', template_folder='templates')
    app.register_blueprint(blueprint)
Run Code Online (Sandbox Code Playgroud)

我最初的想法是,通过定义我自己的页面,我 …

python templates jinja2 flask

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

Stripe API:我的帐号是什么?如何在GET/v1/accounts /中默认它?

我刚刚开始使用Stripe API,而且我已经遇到了一些我不理解的东西:

如何确定 自己的Stripe帐户的标识(例如acct_abcd1234blablabla)?

我在我的临时Stripe测试帐户中没有看到任何类型的帐户标识符(尽管我可能只是在"帐户设置"窗格的正确选项卡下查看).

现在," 检索帐户 " 的文档说:

ARGUMENTS
account [可选]
要检索的帐户的标识符.如果未提供,则默认为API密钥的帐户.

而现在似乎忽略从URI帐户标识符得到一个自己的帐户标识符的一个完全合理的方式,因为它应该是返回的JSON对象的属性.但我无法弄清楚如何以导致返回帐户对象的方式省略参数.

鉴于示例调用具有明确的帐户identfier参数,如下所示:

curl https://api.stripe.com/v1/accounts/acct_abcd1234blablabla -u sk_test_foobarbaz:

我的期望是,简单地省略该URI的最后一个元素将使我成为默认值.但如果我这样做:

curl https://api.stripe.com/v1/accounts/ -u sk_test_foobarbaz:

我明白了:

{
  "error": {
    "type": "invalid_request_error",
    "message": "Unrecognized request URL (GET: /v1/accounts/). Please see https://stripe.com/docs or we can help at https://support.stripe.com/."    
  }
}
Run Code Online (Sandbox Code Playgroud)

当然,如果我做一些愚蠢的事情,就像省略尾随斜杠一样:

curl https://api.stripe.com/v1/accounts -u sk_test_foobarbaz:

我可以理解,连接帐户的(空)列表,这不是我想要的:

{
  "object": "list",
  "data": [],
  "has_more": false,
  "url": "/v1/accounts"
}
Run Code Online (Sandbox Code Playgroud)

那么,我在这里错过了什么?

  • 指定"使用默认值"的正确方法是GET /v1/accounts/什么?
  • 或者,如何通过我的Stripe帐户信息中心找到我的帐户标识符?

(顺便说一句,我会注意到API示例显示了一个有效的帐户标识符,对应于他们向我显示的私钥,所有这些都可能与我的仪表板会话神奇地协调,这会向我显示相同的私钥.但是这在真实应用程序中获取自己的帐户标识符似乎不太正确.)

rest stripe-payments

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

在一个函数中使用PHP define()实际上对该函数的调用者有用吗?

在php.net手册页上define(),有一个用户提供的注释,表明您可以define()在函数内进行有用的调用.

轻描淡写,建议是创建一个这样的函数:

<?php  
function xdefine($a) {
  foreach($a as $k => $v)
    define($k, $v); 
}  
?>
Run Code Online (Sandbox Code Playgroud)

然后随后像这样使用它:

<?php
xdefine(array(
    "SECOND" => 1,
    "MINUTE" => 60,
    "HOUR" => 3600,
    "DAY" => 86400,
    "WEEK" => 604800,
    "MONTH" => 2592000, // 30 days month
    "YEAR" => 31536000,
    "LEAPYEAR" => 31622400
));
?>
Run Code Online (Sandbox Code Playgroud)

但是我的感觉和我的经验都是这不起作用:在xdefine()调用之后,每个标识符只是评估它自己的名字,而不是它xdefine()应该绑定到它的值.

原因对我来说似乎很明显(即因为符号得到它们的值,因为包含调用的模块xdefine()正在被解析/加载),但也许有一些我遗漏的微妙之处.这篇文章的作者使用一个可爱的Unicode字符命名他的功能有所不同,但我很确定这只是一个美学差异.

(顺便说一句,类似的东西的工作对我来说,如果我不这样定义一个函数xdefine(),而是仅仅运行相同的foreach()在数组的内容循环,条件是循环和数组是在模块范围内,这也是从我的角度来看,预期的行为.)

那么,有人可以看一下原帖并告诉我它是否真的有什么意义吗?或者作者是否错了?

(我将这个发布到引用的php.net页面,但我想如果我在这里发布它,我会更快地关注这个问题:-)

php scope constants function

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

将Go接口{}直接比较为内置类型:为什么这样做?

为什么以下Go代码有效?

也就是说,由于类型的fbinterface{}(而不是任何bool,intstring),怎么可能对我来说,与脱身不是铸造或类型的断言f,并b在三个的if声明?

package main

import (
    "fmt"
    "reflect"
)

func foop(p map[string]interface{}) {
    p["foo"] = true
}

func barp(p map[string]interface{}) {
    p["bar"] = 17
}

func foop2(p map[string]interface{}) {
    p["foo"] = "blah"
}

func main() {
    p := make(map[string]interface{})
    fmt.Printf("%v\n", p)

    foop(p)
    barp(p)
    f := p["foo"]
    b := p["bar"]
    fmt.Printf("f: %T\n", f)
    if f == true {
        fmt.Println("ok")
    }
    fmt.Printf("b: …
Run Code Online (Sandbox Code Playgroud)

types casting go

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