小编mgi*_*son的帖子

具有全局数据的python并行映射(multiprocessing.Pool.map)

我正在尝试在多个进程上调用一个函数.显而易见的解决方案是python的multiprocessing模块.问题是该功能有副作用.它创建一个临时文件,并使用atexit.register和全局列表注册要在退出时删除的文件.以下内容应说明问题(在不同的上下文中).

import multiprocessing as multi

glob_data=[]
def func(a):
    glob_data.append(a)

map(func,range(10))
print glob_data  #[0,1,2,3,4 ... , 9]  Good.

p=multi.Pool(processes=8)
p.map(func,range(80))

print glob_data  #[0,1,2,3,4, ... , 9] Bad, glob_data wasn't updated.
Run Code Online (Sandbox Code Playgroud)

有没有办法更新全球数据?

请注意,如果您尝试上面的脚本,您可能不应该从交互式解释器尝试它,因为multiprocessing要求模块__main__可以由子进程导入.

UPDATE

global在func中添加关键字没有帮助 - 例如:

def func(a):  #Still doesn't work.
    global glob_data
    glob_data.append(a)
Run Code Online (Sandbox Code Playgroud)

python parallel-processing

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

emacs中的评论模式

我通常使用没有任何类型的块/多行注释的语言编程(例如python[ #]和fortran[ c!].).有没有办法在emacs中定义一个允许我输入多行注释的次要模式?我的意思是,它会导致emacs在X行(比如72)之后自动换行文本并自动将注释字符(从当前主要模式中取出)添加到每行的开头?

对不起,如果这是一个非常基本的问题 - 我的elisp技能充其量是最基本的.

emacs comments elisp multiline

12
推荐指数
1
解决办法
1639
查看次数

itertools.islice实现 - 有效地切片列表

早些时候,我试图回答一个问题,我希望尽可能有效地迭代列表切片.

for x in lst[idx1:]:
Run Code Online (Sandbox Code Playgroud)

是不理想的,因为它创建一个副本(通常,这是O(n)).我的下一个想法是使用itertools.islice.但是,如果你看一下文档,它似乎islice会调用,next直到它找到它正在寻找的索引,它将开始产生值.这也是O(n).如果传递给的对象islice是a list或a tuple似乎可以在这里进行优化- 看起来你可以直接迭代"切片"(在C中)而不实际制作副本.我很好奇这个优化是否在源头,但我没有找到任何东西.我对C和python源代码树并不是很熟悉,所以我完全有可能错过了它.

我的问题是:

有没有办法迭代列表"切片"而不制作列表切片的副本,而不烧掉一堆不需要的元素(在优化的C实现中)?

我很清楚我可以为此编写自己的生成器(非常天真,不考虑许多参数应该是可选的,等等):

def myslice(obj,start,stop,stride):
    for i in xrange(start,stop,stride):
        yield obj[i]
Run Code Online (Sandbox Code Playgroud)

但这肯定不会超过优化的C实现.


如果你想知道为什么我需要这个直接在一个切片上循环,请考虑以下两者之间的区别:

takewhile(lambda x: x == 5, lst[idx:])  #copy's the tail of the list unnecessarily
Run Code Online (Sandbox Code Playgroud)

takewhile(lambda x: x == 5, islice(lst,idx,None)) #inspects the head of the list unnecessarily 
Run Code Online (Sandbox Code Playgroud)

最后:

takewhile(lambda x: x == 5, magic_slice(lst,idx,None)) #How to create magic_slice???
Run Code Online (Sandbox Code Playgroud)

python slice python-itertools

12
推荐指数
1
解决办法
1720
查看次数

如何解压缩里面有多个文件夹/文件的.xz文件?

我正在尝试解压缩.xz文件,其中包含一些foders和文件.我没有看到使用lzma模块执行此操作的直接方法.这就是我所看到的解压缩方法:

In [1]: import lzma

In [2]: f = lzma.decompress("test.tar.xz")
---------------------------------------------------------------------------
error                                     Traceback (most recent call last)
<ipython-input-2-3b08bf488f9d> in <module>()
----> 1 f = lzma.decompress("test.tar.xz")

error: unknown file format
Run Code Online (Sandbox Code Playgroud)

是否还有其他方法可以解压缩此文件,以便创建生成的文件夹?

python lzma

12
推荐指数
1
解决办法
9984
查看次数

是否保证在创建类时定义"__module__"?

我正在阅读一些基本上看起来像这样的代码:

class Foo(object):
    class_name = __module__.replace('_', '-')
Run Code Online (Sandbox Code Playgroud)

对我来说,这看起来很奇怪(__module__那是什么?)所以我去了看python 数据模型.快速搜索显示这__module__是类对象和函数对象的属性.但是,__module__全局命名空间中没有可用的东西(只需要通过查看它并观察NameError结果就可以轻松验证...).

我决定将其用于实现特定的行为,但作为最后的检查,我决定使用其他实现进行测试.事实证明,此代码以1执行

  • Cpython 2.7.6
  • Cpython 3.4.0
  • jython 2.5.3
  • PyPy 2.2.1(Python 2.7.3)

我的问题是这种行为是否实际上是在语言参考中的任何地方定义的.我不确定我为什么__module__要这样做,但是我可以安全地依赖于类创建命名空间,还是所有实现者都决定以同样的方式执行此操作?

1所有linux,但我怀疑这很重要......

python python-internals

12
推荐指数
1
解决办法
1264
查看次数

如何在构造函数中初始化Objective C结构?

我在Objective C上使用一个结构来存储一些数据,如下所示:


@interface Interface : NSObject
{
    // my Data
    struct Data
    {
        __unsafe_unretained BOOL isInit;
        __unsafe_unretained BOOL isRegister;
        __unsafe_unretained NSString* myValue;

       // Data() : isInit(false), isRegister(false), myValue(@"mYv4lue") {} // Constructor doesnt work
    };

    struct Data myData;  // Create Struct

}

但是我无法使用构造函数进行编译.我希望在创建Struct时值会采用一些默认值.

我怎样才能做到这一点?

constructor struct objective-c

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

gnuplot:字体较小的字幕

有人知道如何在gnuplot中插入字体较小的字幕吗?

目前,我创建字幕的方式是\n在标题中使用.另外,我希望副标题有一个较小的字体大小.

提前致谢.

gnuplot

11
推荐指数
2
解决办法
9394
查看次数

使用numpy.interp进行线性插值

我有一个浮点数的一维数组A,其中大部分是好的,但缺少一些值.丢失的数据被替换为nan(不是数字).我必须通过线性插值从附近的好值中替换数组中的缺失值.所以,例如:

F7(np.array([10.,20.,nan,40.,50.,nan,30.])) 
Run Code Online (Sandbox Code Playgroud)

应该回来

np.array([10.,20.,30.,40.,50.,40.,30.]). 
Run Code Online (Sandbox Code Playgroud)

使用Python做到这一点最好的方法是什么?

任何帮助将非常感激

谢谢

python interpolation numpy linear-interpolation

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

转移numpy数据的所有权

在我之前的问题中,我学会了调整子类的大小ndarray.整齐.不幸的是,当我尝试调整大小的数组是计算的结果时,它不再有效:

import numpy as np

class Foo(np.ndarray):
    def __new__(cls,shape,dtype=np.float32,buffer=None,offset=0,
                strides=None,order=None):
        return np.ndarray.__new__(cls,shape,dtype,buffer,offset,strides,order)

    def __array_prepare__(self,output,context):
        print output.flags['OWNDATA'],"PREPARE",type(output)
        return np.ndarray.__array_prepare__(self,output,context)

    def __array_wrap__(self,output,context=None):
        print output.flags['OWNDATA'],"WRAP",type(output)

        return np.ndarray.__array_wrap__(self,output,context)

a = Foo((32,))
#resizing a is no problem
a.resize((24,),refcheck=False)

b = Foo((32,))
c = Foo((32,))

d = b+c
#Cannot resize `d`
d.resize((24,),refcheck=False)
Run Code Online (Sandbox Code Playgroud)

确切的输出(包括追溯)是:

True PREPARE <type 'numpy.ndarray'>
False WRAP <class '__main__.Foo'>
Traceback (most recent call last):
  File "test.py", line 26, in <module>
    d.resize((24,),refcheck=False)
ValueError: cannot resize this array: it does not own …
Run Code Online (Sandbox Code Playgroud)

python numpy

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

是否保证False"为0"且True"为1"?

可能重复:
在Python中False == 0和True == 1是一个实现细节还是由语言保证?

我今天注意到以下工作使用python 2.6(Cpython)...

>>> a=[100,200]
>>> a[True]
200
>>> a[False]
100
Run Code Online (Sandbox Code Playgroud)

这是否可以移植到其他python实现(例如True/ False保证从int继承?True保证评估为1而不是其他一些非零数字?)是否有任何情况会有用?它似乎可以用作三元运算符的另一种形式,但我不知道那里获得了多少......

python boolean

9
推荐指数
1
解决办法
4128
查看次数