我将我在应用程序中看到的问题减少到下面的测试用例中.在此代码中,父进程同时生成2(您可以生成更多)子进程,这些子进程通过stdin从父进程读取大消息,休眠5秒,然后回写一些内容.但是,在某处发生了意外的等待,导致代码在10秒内完成,而不是预期的5.
如果设置verbose=True,你可以看到分散子进程正在接收大部分消息,然后等待3个字符的最后一个块 - 它没有检测到管道已经关闭.此外,如果我只是不对第二个进程(doreturn=True)做任何事情,第一个进程永远不会看到EOF.
有什么想法发生了什么?再往下是一些示例输出.提前致谢.
from subprocess import *
from threading import *
from time import *
from traceback import *
import sys
verbose = False
doreturn = False
msg = (20*4096+3)*'a'
def elapsed(): return '%7.3f' % (time() - start)
if sys.argv[1:]:
start = float(sys.argv[2])
if verbose:
for chunk in iter(lambda: sys.stdin.read(4096), ''):
print >> sys.stderr, '..', time(), sys.argv[1], 'read', len(chunk)
else:
sys.stdin.read()
print >> sys.stderr, elapsed(), '..', sys.argv[1], 'done reading'
sleep(5)
print msg …Run Code Online (Sandbox Code Playgroud) 我已经尝试了python2.6 Ubuntu包中包含的多处理(__version__表示0.70a1)和最新的PyPI(2.6.2.1).在这两种情况下我都不知道如何正确使用imap - 它会导致整个解释器停止响应ctrl-C(虽然地图工作正常).pdb显示next()挂在条件变量wait()调用中IMapIterator,所以没有人唤醒我们.任何提示?提前致谢.
$ cat /tmp/go3.py
import multiprocessing as mp
print mp.Pool(1).map(abs, range(3))
print list(mp.Pool(1).imap(abs, range(3)))
$ python /tmp/go3.py
[0, 1, 2]
^C^C^C^C^C^\Quit
Run Code Online (Sandbox Code Playgroud) 调用transform()时,有没有办法在data.frame的列名中保留空格?目前他们受到了威胁:
> transform(data.frame('a b'=1, check.names=F), `c d`=`a b`)
a.b c.d
1 1 1
Run Code Online (Sandbox Code Playgroud) 有什么方法可以train()使用数据的自定义训练/测试分区来运行吗?我对回测时间序列数据感兴趣(当传统的重采样/CV/等不合适/泄漏时)。即,如果数据按时间从 1...N 排序,那么我会在某个截止值之前重复训练数据,以预测截止值之后的数据(直到某个滑动窗口大小)。我无法确定如何在利用插入符号的其余部分的同时实现这一点train()。预先感谢您的任何提示。
(在Chrome中)是否有一种简单的方法可以确定何时从元素中删除事件处理程序(用于单击)?我的事件处理程序神秘地消失了,但我不确定是否有一种快速简便的方法可以暂停或获得堆栈跟踪/异常.
是否可以从http://host/foo/bar/baz/index.cgi?page = 1开始并递归获取http:// host/foo /下的任何内容?(无法从http:// host/foo /开始,因为那不是一个有效页面.)我查看了各种选项来控制wget递归提取,例如--no-parent和--include-directories,但是我似乎无法找到完成上述操作的选项,例如一个简单的URL子字符串过滤器.
我正在制作一个像这样的刻面情节:

这完成了:
df = data.frame(val=rnorm(2005), class=c(rep(c('a','b'), 1000), rep('c', 5)))
qplot(val, ..count.., data=df, geom='density', fill=I('black')) +
opts(strip.text.y = theme_text()) +
# scale_y_continuous(breaks=seq(0, 999, by=50)) +
facet_grid(class ~ ., scale = "free", space = "free")
Run Code Online (Sandbox Code Playgroud)
我故意确实希望小平面的大小不同(只占用尽可能多的垂直空间)但保持相同的比例.
现在,这个情节存在一些问题:
我想在每个方面施加一个最小高度,这样你至少可以看到正确的标签文字,并将显示识别为空密度图 - 目前,如果我不知道我是如何生成这个情节的,我绝对不会已经猜到了底部的神器是什么.
虽然小平面具有相同的比例,但y轴不共享相同的网格/标记.我可以通过取消注释注释行来强制它们共享相同的网格,但后来我手动计算这个 - 有没有办法在任何密度图中使用最粗网格?
提前感谢您的任何答案.
在开发和部署本机 Windows 应用程序时,我经常需要先安装运行时才能运行我的二进制文件,或者将库与我的二进制文件静态链接。例如,在使用 Visual Studio 2008 构建“Win32 控制台”项目后,尝试在新的 Windows 7 映像上运行该程序会导致:
应用程序无法启动,因为其并行配置不正确。请查看应用程序事件日志或使用命令行 sxstrace.exe 工具获取更多详细信息。
在 StackOverflow上的其他帖子中已经提出了这样的问题。
如何开发不需要目标操作系统上尚不存在的运行时的应用程序(即不需要安装可再发行包或私有/共享并行程序集)?如何避免使用 msvc[mpr]90.dll 而只使用 \windows\system32*.{dll,sys} 中的 Windows API?
我正在考虑来自演示场景的代码行,但这通常不可用。
在尝试编译以下内容时:
#include <string>
#include <iterator>
#include <iostream>
using namespace std;
int main() {
string s(istream_iterator<char>(cin), istream_iterator<char>());
return s.size();
}
Run Code Online (Sandbox Code Playgroud)
g ++ 4.4.1给了我:
main.cc: In function ‘int main()’:
main.cc:6: error: request for member ‘size’ in ‘s’, which is of non-class type ‘std::string(std::istream_iterator<char, char, std::char_traits<char>, int>, std::istream_iterator<char, char, std::char_traits<char>, int> (*)())’
Run Code Online (Sandbox Code Playgroud)
根据libstdc ++ docs,string有一个ctor,它接受一个开始/结束迭代器对.为什么我会收到此错误?