根据这个问题和答案 - 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 可用处理器的数量(与当前使用的数量相反)?
笔记:
这个问题是不被接受的答案来回答如何找出使用python CPU的数量,因为在上方挂了一个问题,说明这个问题,打印的内容/proc/self/status显示所有4个内核为可用的程序.
在我看来,"可移植"排除了涉及解析内容的任何方法/proc/self/status,其格式可能因Linux的发行版本而异,并且在OS X上甚至不存在.(对于任何其他伪文件也是如此,同样.)
任何人都可以告诉我为什么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) 正如标题所示,我试图弄清楚如何使用go-git与 Git CLI 命令给出相同结果的方式创建本地分支git branch <branchname>。
据我所知,git branch <branchname>(没有明确的<start-point>论证)做了两件事:
.git/refs/heads/<branchname>指向当前HEAD提交.git/logs/refs/heads/<branchname>使用一行记录分支的创建进行创建。它可能会做更多的事情,但我知道它肯定会做这两件事。(如果你知道更多它的作用,请分享!)
接下来的大部分内容记录了我在研究我的选择时的发现之旅,我想我现在可能已经掌握了上面的#1。不过,对于#2,我开始认为我可能是 SOL,至少使用go-git.
我最初天真的想法是直接打电话Repository.CreateBranch,并且有一个类似的 SO 问题的答案(“如何使用 go-git 检查新的本地分支?”),这似乎为这个想法提供了可信度。但一旦我开始研究细节,事情就变得非常混乱。
首先,Repository.CreateBranch采用 aconfig.Config作为输入(为什么?),并且似乎还修改了存储库的.git/config文件(同样,为什么?)。我已经验证该git branch <branchname>命令不会触及存储库的配置,并且当我调用该命令时,我当然不需要提及有关配置的任何内容。
其次,我上面链接的 SO 答案引用了 中的代码,go-git该repository_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) 编辑:在考虑回答之前,请仔细阅读问题.我不是在询问在生产代码中使用内联事件处理程序的可行性,也不是在询问实现我引用的文章所承诺的结果的最佳方法.这是一个关于Javascript语义和浏览器实现细节的问题,而不是关于最佳编码实践的问题.
谢谢.
听起来像是一场噩梦,对吧?
然而,我发现了一些在线建议,主张做这样的事情以防止双重提交表单:
<input type="submit"
onclick="this.disabled=true;
this.value='Sending, please wait...';
this.form.submit();" />
Run Code Online (Sandbox Code Playgroud)
暂且不讨论内联事件处理程序的邪恶,我在这里看到的问题是:
"submit",因此提交其包含的表单是其默认行为;onclick处理程序明确地提交含有表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) 我认为,在详细讨论以下细节之前,我真正应该问的一个基本问题可能是:
作为拥有已连接到平台帐户的独立 Stripe 帐户的供应商/服务提供商,我是否可以设置一个 Webhook,当平台代表我成功收费时将调用该 Webhook?
无论如何,这就是我想要做的,通过在收件人帐户上设置的 Webhook,将其配置为针对以下任何事件进行调用:
从我的仪表板测试调用 Webhook 会使其按预期触发。
但是,当我通过平台创建费用并设置destination引用连接的帐户时,网络钩子不会触发 - 即使在连接的帐户中成功创建费用以及伴随的事件。
一个重要的线索——我不知道如何解释——是仪表板的“事件和 Webhooks”选项卡中显示的事件类型不是或者charge.succeeded——charge.captured它是payment.created(!)。
但:
payment对象类型(事实上,事件中引用的对象的类型是charge):所以:
这是否只是 Stripe 需要修复的 API 实现中的一个命名问题?
或者,在我拥有的连接的独立帐户上设置 Webhook 的想法是否存在一些我无法理解的更根本的问题?
(或者我只是做错了?)
我是一个完全的 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_app其UserManager类的函数(__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)
我最初的想法是,通过定义我自己的页面,我 …
我刚刚开始使用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/什么?(顺便说一句,我会注意到API示例显示了一个有效的帐户标识符,对应于他们向我显示的私钥,所有这些都可能与我的仪表板会话神奇地协调,这会向我显示相同的私钥.但是这在真实应用程序中获取自己的帐户标识符似乎不太正确.)
在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页面,但我想如果我在这里发布它,我会更快地关注这个问题:-)
为什么以下Go代码有效?
也就是说,由于类型的f和b是interface{}(而不是任何bool,int或string),怎么可能对我来说,与脱身不是铸造或类型的断言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)