小编Dil*_*rix的帖子

std :: thread - "在没有活动异常的情况下调用终止",不想"加入"它

根据这个问题,我正在使用一个线程来终止用户输入的功能.我的代码看起来像:

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循环时提供输入(它不一定).

谢谢!

c++ multithreading

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

假设大小数组:冒号与星号 - DIMENSION(:) arr与arr(*)

这两种声明假定大小数组的方法之间有什么区别吗?

例如

real, dimension(:) :: arr
Run Code Online (Sandbox Code Playgroud)

real               :: arr(*)
Run Code Online (Sandbox Code Playgroud)

arrays fortran fortran90

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

多处理pool.map按特定顺序调用函数

如何使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'参数, …

python parallel-processing multiprocessing map-function

20
推荐指数
1
解决办法
8267
查看次数

Python最快访问文件中的行

我在一个文件中有一个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吗?

使用二进制文件,在这种情况下可能更容易跳过,是一个选项---但我宁愿避免它.

python io performance file

16
推荐指数
2
解决办法
8682
查看次数

在python多处理中修改对象

我有一大堆自定义对象,我需要执行独立(可并行化)的任务,包括修改对象参数.我尝试过使用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)

python parallel-processing multiprocessing

14
推荐指数
2
解决办法
9954
查看次数

一维数组形状(长度)与(长度,1)对比(长度)

当我使用检查数组的形状numpy.shape(),我有时候会(length,1),有时候(length,).看起来差异是列与行向量...但似乎并没有改变关于数组本身的任何内容[除了一些函数在我传递带有形状的数组时抱怨(length,1)].

这两者有什么区别?
为什么不是形状,(length)

python arrays math numpy

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

python numpy和内存效率(通过引用与值相比)

我最近越来越多地使用python代替c/c ++,因为它将我的编码时间缩短了几倍.与此同时,当我处理大量数据时,我的python程序运行的速度开始变得比c慢很多.我想知道这是否是由于我使用大型对象/数组效率低下.是否有关于如何通过numpy/python处理内存的全面指南?当事物通过引用和按值传递时,当事物被复制时,何时复制,什么类型是可变的,哪些不是.

python numpy reference pass-by-reference

12
推荐指数
2
解决办法
6786
查看次数

最小二乘拟合直线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时遇到问题.谢谢!

python plot

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

如何保留从常规终端到gnu屏幕的emacs颜色

我正在使用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'不起作用.

macos emacs terminal gnu-screen colors

11
推荐指数
1
解决办法
4769
查看次数

设置ipython的默认科学记数法阈值

如何修改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)

python printing formatting ipython output

10
推荐指数
1
解决办法
7345
查看次数