根据这个问题,我正在使用一个线程来终止用户输入的功能.我的代码看起来像:
bool stopper = false;
thread stopThread(userStop, &stopper); // start thread looking for user input
for(int i = 0; i < 1000; i++) {
if(stopper) { break; } // break if desired
// Do stuff
}
return 0;
Run Code Online (Sandbox Code Playgroud)
哪里,
userStop(bool *st) {
char chChar = getchar();
if(chChar == '\n') {
*st = true;
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行它时,我得到错误terminate called without an active exception.基于这些问题:线程终止叫不活跃异常,C++终止叫不活动异常 ; 它看起来像它,因为我不是'再次'加入线程.
问题是,我不想'加入'线程 - 因为那时用户需要提供输入userStop()才能终止,但我只希望用户在断开for循环时提供输入(它不一定).
谢谢!
这两种声明假定大小数组的方法之间有什么区别吗?
例如
real, dimension(:) :: arr
Run Code Online (Sandbox Code Playgroud)
和
real :: arr(*)
Run Code Online (Sandbox Code Playgroud) 如何使multiprocessing.pool.map按数字顺序分配进程?
更多信息:
我有一个程序可以处理几千个数据文件,并绘制每个文件的图.我正在使用a multiprocessing.pool.map将每个文件分发到处理器,它运行良好.有时这需要很长时间,在程序运行时查看输出图像会很好.如果地图进程按顺序分发快照,这将会容易得多; 相反,对于我刚刚执行的特定运行,分析的前8个快照是: 0, 78, 156, 234, 312, 390, 468, 546.有没有办法让它按数字顺序更紧密地分配它们?
示例:
这是一个包含相同键元素的示例代码,并显示相同的基本结果:
import sys
from multiprocessing import Pool
import time
num_proc = 4; num_calls = 20; sleeper = 0.1
def SomeFunc(arg):
time.sleep(sleeper)
print "%5d" % (arg),
sys.stdout.flush() # otherwise doesn't print properly on single line
proc_pool = Pool(num_proc)
proc_pool.map( SomeFunc, range(num_calls) )
Run Code Online (Sandbox Code Playgroud)
产量:
0 4 2 6 1 5 3 7 8 10 12 14 13 11 9 15 16 18 17 19
Run Code Online (Sandbox Code Playgroud)
来自@Hayden:使用'chunksize'参数, …
我在一个文件中有一个ASCII表,我想从中读取一组特定的行(例如,行4003到4005).问题是这个文件可能非常长(例如,数千到数百万行),我想尽快做到这一点.
糟糕的解决方案:读入整个文件,然后转到这些行,
f = open('filename')
lines = f.readlines()[4003:4005]
Run Code Online (Sandbox Code Playgroud)
更好的解决方案:enumerate在每条线路上,以便它不在内存中(la /sf/answers/145731631/)
f = open('filename')
lines = []
for i, line in enumerate(f):
if i >= 4003 and i <= 4005: lines.append(line)
if i > 4005: break # @Wooble
Run Code Online (Sandbox Code Playgroud)
最佳方案?
但这仍然需要通过每一行.是否有更好的(在速度/效率方面)访问特定线路的方法?即使我只访问文件一次(通常),我应该使用linecache吗?
使用二进制文件,在这种情况下可能更容易跳过,是一个选项---但我宁愿避免它.
我有一大堆自定义对象,我需要执行独立(可并行化)的任务,包括修改对象参数.我尝试过使用Manager().dict和'sharedmem'ory,但两者都没有用.例如:
import numpy as np
import multiprocessing as mp
import sharedmem as shm
class Tester:
num = 0.0
name = 'none'
def __init__(self,tnum=num, tname=name):
self.num = tnum
self.name = tname
def __str__(self):
return '%f %s' % (self.num, self.name)
def mod(test, nn):
test.num = np.random.randn()
test.name = nn
if __name__ == '__main__':
num = 10
tests = np.empty(num, dtype=object)
for it in range(num):
tests[it] = Tester(tnum=it*1.0)
sh_tests = shm.empty(num, dtype=object)
for it in range(num):
sh_tests[it] = tests[it]
print sh_tests[it]
print '\n' …Run Code Online (Sandbox Code Playgroud) 当我使用检查数组的形状numpy.shape(),我有时候会(length,1),有时候(length,).看起来差异是列与行向量...但似乎并没有改变关于数组本身的任何内容[除了一些函数在我传递带有形状的数组时抱怨(length,1)].
这两者有什么区别?
为什么不是形状,(length)?
我最近越来越多地使用python代替c/c ++,因为它将我的编码时间缩短了几倍.与此同时,当我处理大量数据时,我的python程序运行的速度开始变得比c慢很多.我想知道这是否是由于我使用大型对象/数组效率低下.是否有关于如何通过numpy/python处理内存的全面指南?当事物通过引用和按值传递时,当事物被复制时,何时复制,什么类型是可变的,哪些不是.
我有一个由X和Y坐标组成的散点图.我想使用最小二乘拟合到直线以获得最佳拟合线.
适合直线的最小二乘指的是:如果(x_1,y_1),......(x_n,y_n)是测量的数据对,则最佳直线是y = A + Bx.
这是我在python中的代码:
# number of points is 50
A = (sum(x**2)*sum(y) - sum(x)*sum(x*y)) / (50*sum(x**2) - (sum(x))**2)
B = (50*sum(x*y) - sum(x)*sum(y)) / (50*sum(x**2) - (sum(x))**2)
print (A,B)
Run Code Online (Sandbox Code Playgroud)
这看起来是否正确,我在打印A和B时遇到问题.谢谢!
我正在使用OSX雪豹,以备记录.
当我直接从终端使用emacs时,我有一个颜色设置(例如c/c ++),我很满意 - 绿色黑色,红色评论,彩色关键词等等.其中一些是在我的'终端首选项'中设置,有些在我的〜/ .emacs文件中(见下文).当我从屏幕运行emacs时,基本颜色方案是相同的(绿色黑色),但着色是不同的(例如注释字符是红色,但不是整个评论) - 并且真的很烦人.
任何帮助,将不胜感激!
在我的'.emacs'文件中(这在gnu-screen emacs中停止工作):
(global-font-lock-mode t)
(custom-set-faces
'(font-lock-comment-face
((((class color) (background light))
:foreground "tomato")
)))
Run Code Online (Sandbox Code Playgroud)
在我的'.screenrc'文件中:
shell -$SHELL # colors still don't work without this
#term xterm-256color # using this doesn't fix the colors (suggested on some forums)
altscreen on
startup_message off
Run Code Online (Sandbox Code Playgroud)
我认为我的.screenrc文件中的命令'shell - $ SHELL'使得屏幕上的命令提示符与默认命令相同 - 它确实使我的命令行说'computername:/ DIR/username $'而不仅仅是'庆典-3.2 $"
================================================== ===============
解决方案:感谢Greg E.
我需要在屏幕上设置我的终端模拟器以匹配我的普通shell.为此,我补充道
export TERM='xterm-color'
Run Code Online (Sandbox Code Playgroud)
到〜/ .bash_profile
出于某种原因,'〜/ .screenrc'文件中的'term xterm-color'不起作用.
如何修改python决定以科学计数法打印的点?
例如,我喜欢一切> 1e4或< 1e-4用科学记谱法打印.
好:
In [11]: 5e20
Out[11]: 5e+20
Run Code Online (Sandbox Code Playgroud)
坏:
In [12]: 5e10
Out[12]: 50000000000.0
Run Code Online (Sandbox Code Playgroud)