相关疑难解决方法(0)

用于Python 3.4的Microsoft Visual C++编译器

我知道有一个"用于Python 2.7的Microsoft Visual C++编译器",但目前或计划中是否有用于Python 3.4的Microsoft Visual C++编译器或用于Python 3.x的Microsoft Visual C++编译器?如果我不必在整个实验室安装不同版本的visual studio,那将是非常有益的.

python windows compilation python-3.x

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

多处理和莳萝可以一起做什么?

我想multiprocessing在Python中使用该库.遗憾地multiprocessing使用pickle不支持闭包,lambdas或函数的函数__main__.所有这三个对我来说都很重要

In [1]: import pickle

In [2]: pickle.dumps(lambda x: x)
PicklingError: Can't pickle <function <lambda> at 0x23c0e60>: it's not found as __main__.<lambda>
Run Code Online (Sandbox Code Playgroud)

幸运的是,有dill一个更健壮的泡菜.显然dill在导入时执行魔术以使泡菜工作

In [3]: import dill

In [4]: pickle.dumps(lambda x: x)
Out[4]: "cdill.dill\n_load_type\np0\n(S'FunctionType'\np1 ...
Run Code Online (Sandbox Code Playgroud)

这非常令人鼓舞,特别是因为我无法访问多处理源代码.可悲的是,我仍然无法得到这个非常基本的例子

import multiprocessing as mp
import dill

p = mp.Pool(4)
print p.map(lambda x: x**2, range(10))
Run Code Online (Sandbox Code Playgroud)

为什么是这样?我错过了什么?究竟是multiprocessing+ dill组合的限制是什么?

JF塞巴斯蒂安的临时编辑

mrockli@mrockli-notebook:~/workspace/toolz$ python testmp.py 
    Temporary Edit for J.F Sebastian

mrockli@mrockli-notebook:~/workspace/toolz$ python testmp.py 
Exception …
Run Code Online (Sandbox Code Playgroud)

python pickle multiprocessing dill

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

使用多处理时的PicklingError

我在多处理模块中使用Pool.map_async()(以及Pool.map())时遇到问题.我已经实现了一个并行循环函数,只要函数输入到Pool.map_async是一个"常规"函数,它就能正常工作.当函数是例如类的方法时,我得到一个PicklingError:

cPickle.PicklingError: Can't pickle <type 'function'>: attribute lookup __builtin__.function failed
Run Code Online (Sandbox Code Playgroud)

我只使用Python进行科学计算,所以我对酸洗的概念不太熟悉,今天就对它进行了一些了解.我在使用python的多处理Pool.map()时已经看过几个先前的答案,比如无法选择<type'instancemethod'>,但我无法弄清楚如何使它工作,即使遵循提供的链接回答.

我的代码,目标是使用多个内核模拟Normal rv的向量.请注意,这只是一个示例,可能甚至没有在多个内核上运行的回报.

import multiprocessing as mp
import scipy as sp
import scipy.stats as spstat

def parfor(func, args, static_arg = None, nWorkers = 8, chunksize = None):
    """
    Purpose: Evaluate function using Multiple cores.

    Input:
        func       - Function to evaluate in parallel
        arg        - Array of arguments to evaluate func(arg)  
        static_arg - The "static" argument (if any), i.e. the variables that are      constant in the evaluation …
Run Code Online (Sandbox Code Playgroud)

python multiprocessing

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

不能pickle静态方法 - 多处理 - Python

我正在对我的代码应用一些并行化,我在其中使用类.我知道如果不采用Python提供的任何其他方法,就不可能选择类方法.我在这里找到了解决方案.在我的代码中,我必须使用类来并行化部分.在这里,我发布了一个非常简单的代码,只是代表我的结构(是相同的,但是我删除了方法内容,这是很多数学计算,对于我得到的输出来说是微不足道的).问题是'因为我可以腌制一种方法(shepard_interpolation),但是另一种方法(calculate_orientation_uncertainty)我得到了泡菜错误.我不知道为什么会这样,或者为什么它会起作用.

def _pickle_method(method):
    func_name = method.im_func.__name__
    obj = method.im_self
    cls = method.im_class
    if func_name.startswith('__') and not func_name.endswith('__'): #deal with mangled names
        cls_name = cls.__name__.lstrip('_')
        func_name = '_' + cls_name + func_name
    print cls
    return _unpickle_method, (func_name, obj, cls)


def _unpickle_method(func_name, obj, cls):
    for cls in cls.__mro__:
        try:
            func = cls.__dict__[func_name]
        except KeyError:
            pass
        else:
            break
    return func.__get__(obj, cls)

class ImageData(object):

    def __init__(self, width=60, height=60):
        self.width = width
        self.height = height
        self.data = []
        for i in range(width):
            self.data.append([0] …
Run Code Online (Sandbox Code Playgroud)

python pool class pickle multiprocessing

8
推荐指数
2
解决办法
6121
查看次数

Python类继承多处理,访问类成员时遇到麻烦

简而言之,我说有以下内容:

import multiprocessing

class Worker(multiprocessing.Process):
    def __init__(self):
        multiprocessing.Process.__init__(self)
        print "Init"
        self.value = None

    def run(self):
        print "Running"
        self.value = 1

p = Worker()
p.start()
p.join()
print p.value
Run Code Online (Sandbox Code Playgroud)

我希望输出为:

Init
Running
1
Run Code Online (Sandbox Code Playgroud)

相反,它是

Init
Running
None
Run Code Online (Sandbox Code Playgroud)

有人可以向我解释为什么会这样吗?我不理解的是什么,我该如何正确地做到这一点?

谢谢.

python multiprocessing

6
推荐指数
1
解决办法
6154
查看次数

Python多处理速度

我编写了这段代码来测试我的计算机上的Python多处理:

from multiprocessing import Pool

var = range(5000000)
def test_func(i):
    return i+1

if __name__ == '__main__':
    p = Pool()
    var = p.map(test_func, var)
Run Code Online (Sandbox Code Playgroud)

我使用Unix的time命令计时,结果如下:

real 0m2.914s
user 0m4.705s
sys  0m1.406s
Run Code Online (Sandbox Code Playgroud)

然后,使用相同vartest_func()我定时:

var = map(test_func, var)
Run Code Online (Sandbox Code Playgroud)

结果是

real 0m1.785s
user 0m1.548s
sys  0m0.214s
Run Code Online (Sandbox Code Playgroud)

多处理代码不应该比普通的代码快得多map吗?

python multiprocessing

5
推荐指数
1
解决办法
3457
查看次数