考虑:
>>> a = {'foo': {'bar': 3}}
>>> b = {'foo': {'bar': 3}}
>>> a == b
True
Run Code Online (Sandbox Code Playgroud)
据蟒蛇文档,你的确可以使用该==辞书运营商.
这里到底发生了什么?Python是否递归检查字典的每个元素以确保相等?它是否确保键完全匹配,并且值也相同匹配?
是否有文档准确指定==字典中的含义?或者我是否必须实现我自己的检查相等的版本?
(如果==操作符有效,为什么不能使用dicts?也就是说,为什么我不能创建一个dicts的set(),或者使用dict作为字典键?)
我有一个Android项目,它有一个Ant构建文件.它通过命令行很好用:
rascher@coltrane:~/git/$ ant
Buildfile: build.xml
[setup] Android SDK Tools Revision 8
[setup] Project Target: Android 2.1-update1
[setup] API level: 7
[setup]
... etc etc etc ...
Run Code Online (Sandbox Code Playgroud)
但是当我尝试在eclipse中使用它时,build.xml有一个红色的X.
<?xml version="1.0" encoding="UTF-8"?>
<project name="MyWonderfulProject" default="help">
Run Code Online (Sandbox Code Playgroud)
<project带有错误的下划线:此项目中不存在默认目标帮助
看起来互联网上的其他人都有这个问题,这似乎是由于build.xml使用来自此buildfile导入的多个嵌套的特定于android的文件的指令.
我的工作区中有其他项目使用Eclipse的构建机制,所以我知道我的环境能够编译,运行和部署Android应用程序而不会出现问题.但是这个构建文件给我带来了麻烦.
修复是什么?
考虑以下代码:
one.c:
#include <stdio.h>
int one() {
printf("one!\n");
return 1;
}
Run Code Online (Sandbox Code Playgroud)
two.c:
#include <stdio.h>
int two() {
printf("two!\n");
return 2;
}
Run Code Online (Sandbox Code Playgroud)
prog.c中
#include <stdio.h>
int one();
int two();
int main(int argc, char *argv[])
{
one();
two();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我想将这些程序链接在一起.所以我这样做:
gcc -c -o one.o one.c
gcc -c -o two.o two.c
gcc -o a.out prog.c one.o two.o
Run Code Online (Sandbox Code Playgroud)
这很好用.
或者我可以创建一个静态库:
ar rcs libone.a one.o
ar rcs libtwo.a two.o
gcc prog.c libone.a libtwo.a
gcc -L. prog.c -lone -ltwo
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:为什么我会使用第二个版本 - 我创建了一个".a"文件 - 而不是链接我的".o"文件?它们似乎都是静态链接,所以它们之间是否有优势或架构差异?
我正在编写一个连接到数据库的应用程序.我想创建一次db连接,然后在应用程序的整个生命周期中重用该连接.
我还想验证用户身份.用户的身份验证仅在请求的生命周期内生效.
如何区分在烧瓶应用程序生命周期中存储的对象与特定于请求的对象?我在哪里存储它们以便所有模块(以及随后的蓝图)都可以访问它们?
这是我的示例应用程序:
from flask import Flask, g
app = Flask(__name__)
@app.before_first_request
def setup_database(*args, **kwargs):
print 'before first request', g.__dict__
g.database = 'DATABASE'
print 'after first request', g.__dict__
@app.route('/')
def index():
print 'request start', g.__dict__
g.current_user = 'USER'
print 'request end', g.__dict__
return 'hello'
if __name__ == '__main__':
app.run(debug=True, port=6001)
Run Code Online (Sandbox Code Playgroud)
当我运行它(Flask 0.10.1)并导航到http://localhost:6001/,这是控制台中显示的内容:
$ python app.py
* Running on http://127.0.0.1:6001/
* Restarting with reloader
before first request {}
after first request {'database': 'DATABASE'}
request start {'database': 'DATABASE'}
request …Run Code Online (Sandbox Code Playgroud) 作为Java世界中的一个相对新手,我发现很多事情令人沮丧地完成,在许多其他框架中相对微不足道.一个主要的例子是异步http请求的简单解决方案.看起来似乎并不存在,最好的方法是什么?使用像httpclient这样的阻塞类型的lib或内置的java http东西来创建我自己的线程,或者我应该使用更新的非阻塞io java东西 - 对于应该简单的东西来说似乎特别复杂.
我正在寻找的是从开发人员的角度来看易于使用的东西 - 类似于AS3中的URLLoader - 您只需创建一个URLRequest - 附加一堆事件处理程序来处理完成,错误,进度等,并调用一种解雇它的方法.
如果您不熟悉AS3中的URLLoader,它非常简单,看起来像这样:
private void getURL(String url)
{
URLLoader loader = new URLLoader();
loader.addEventListener(Event.Complete, completeHandler);
loader.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);
loader.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
URLRequest request = new URLRequest(url);
// fire it off - this is asynchronous so we handle
// completion with event handlers
loader.load(request);
}
private void completeHandler(Event event)
{
URLLoader loader = (URLLoader)event.target;
Object results = loader.data;
// process results
}
private void httpStatusHandler(Event event)
{
// check status code
}
private …Run Code Online (Sandbox Code Playgroud) 我在R中编写了一个非常基本的包.事实上,我按照本教程创建了一个基本包.
我的包在linux中运行得很好.例如:
> install.packages("linmod", repos=NULL)
Warning in install.packages("linmod", repos = NULL) :
argument 'lib' is missing: using '/home/jpgoel/R/i486-pc-linux-gnu-library/2.9'
* Installing *source* package ‘linmod’ ...
** R
** data
** preparing package for lazy loading
** help
*** installing help indices
>>> Building/Updating help pages for package 'linmod'
Formats: text html latex example
** building package indices ...
* DONE (linmod)
> library(linmod)
> data(mod1)
> mod1
Call:
linmod.default(x = x, y = y)
Coefficients:
Const Bwt
-0.3566624 4.0340627
现在,我拿了我的"linmod"文件夹,将其复制到Windows XP,并尝试了以下内容:
> install.packages("C:\\Documents\ and\ Settings\\foo\\Desktop\\linmod",repos=NULL) … 我试图了解linux系统调用sched_setaffinity()的工作原理.这是我在这里提出的问题的后续内容.
我有这个指南,它解释了如何使用系统调用,并有一个非常整洁(工作!)的例子.
所以我下载了Linux 2.6.27.19 内核源代码.
我对包含该系统调用的行进行了'grep',得到了91个结果.没有前途.
最后,我试图了解内核如何为特定内核(或处理器)设置指令指针.
我熟悉单核单线程程序的工作原理.有人可能发出'jmp foo'指令,这基本上将IP设置为'foo'标签的内存地址.但是当一个有多个内核时,必须说"在内存地址foo处获取下一条指令,并设置内核编号2的指令指针以便在那里开始执行."
在汇编代码中,我们指定哪个核心执行该操作?
回到内核代码:这里重要的是什么?文件'kernel/sched.c'有一个名为sched_setaffinity()的函数,但返回类型为"long" - 这与其手册页不一致.那么重要的是什么?这些模块中的哪一个显示了组装说明?什么模块正在读取'task_struct',查看'cpus_allowed'成员,然后将其转换为指令?(我还翻阅了glibc源代码 - 但我认为它只是调用内核代码来完成这项任务.)
我正在写一个R函数,我想确保我的R函数的参数是某个类(例如,"矩阵").
做这个的最好方式是什么?
假设我有一个函数"foo"来计算矩阵的逆矩阵:
foo <- function(x)
{
# I want to make sure x is of type "matrix"
solve(x)
}
Run Code Online (Sandbox Code Playgroud)
我怎么能说 - 正如你可能在C中 - function(matrix x)表示" x必须是类型matrix,如果不是,那么返回错误"?
我想编写一个以编程方式发送传真的程序.或接收传真.但不是调制解调器.我想我正在尝试写一个传真模拟器.硬件所做的一切,我想用软件做.
关于这个主题有十亿个SO问题,但是他们要么建议使用在线服务,要么指向一个与我的计算机调制解调器对话的图书馆.所以这是我的具体问题:
当我发送传真时,我可以听到电话线上的嗡嗡声.这告诉我,我的传真机正在生成可由收件人消费的音调.那个协议是什么?是否有RFC指定"像素"如何转换为"频率"?机器来回沟通,还是单向沟通?
如果我们同意传真机将声音频率转换为图像,则应该能够编写一个程序,该程序采用传真传输的MP3并输出图形.为了做到这一点,我需要知道什么?
这些问题是基于任何有缺陷的假设吗?我应该从哪里开始,以便从上面完成目标#2?
我正在使用RabbitMQ让工作进程编码视频文件.我想知道所有文件何时完成 - 也就是说,当所有工作进程都完成时.
我能想到的唯一方法是使用数据库.视频完成编码后:
UPDATE videos SET status = 'complete' WHERE filename = 'foo.wmv'
-- etc etc etc as each worker finishes --
Run Code Online (Sandbox Code Playgroud)
然后检查所有视频是否都已编码:
SELECT count(*) FROM videos WHERE status != 'complete'
Run Code Online (Sandbox Code Playgroud)
但是,如果我要这样做,那么我觉得我正在失去RabbitMQ作为多个分布式工作进程的机制的好处,因为我仍然需要手动维护数据库队列.
RabbitMQ依赖项是否有标准机制?也就是说,一种方式说"等待这5个任务完成,一旦完成,然后启动新任务?"
我不希望让父进程将这些任务添加到队列中,然后"等待"它们中的每一个都返回"已完成"状态.然后我必须为每组视频维护一个单独的过程,此时我已经失去了与单个ThreadPool概念相比分离的工作进程的优势.
我要求的东西是不可能的吗?或者,是否有标准的广泛采用的解决方案来管理我错过的队列中的整体任务状态?
编辑:搜索之后,我发现了类似的问题:使用RabbitMQ获得长时间运行任务的结果
人们对此有什么特别的想法吗?