小编Mik*_*rns的帖子

如果我使用派生类,我可以"pickle local objects"?

pickle参考文献指出可以酸洗的物体组是相当有限的.实际上,我有一个函数返回一个dinamically生成的类,我发现我不能pickle该类的实例:

>>> import pickle
>>> def f():
...     class A: pass
...     return A
... 
>>> LocalA = f()
>>> la = LocalA()
>>> with open('testing.pickle', 'wb') as f:
...     pickle.dump(la, f, pickle.HIGHEST_PROTOCOL)
... 
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
AttributeError: Can't pickle local object 'f.<locals>.A'
Run Code Online (Sandbox Code Playgroud)

这些对象太复杂了pickle.好.现在,有什么神奇的,如果我试图挑选一个类似的对象,但是派生类,它就可以了!

>>> class DerivedA(LocalA): pass
... 
>>> da = DerivedA()
>>> with open('testing.pickle', 'wb') as f:
...     pickle.dump(da, f, pickle.HIGHEST_PROTOCOL)
...
>>>
Run Code Online (Sandbox Code Playgroud)

这里发生了什么事?如果这很容易,为什么不 …

python nested pickle python-3.x

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

AttributeError:'_ io.TextIOWrapper'对象没有属性'next'python

我正在使用python 3.3.3.我正在从tutorialspoint.com上做教程.我无法理解这个错误是什么.

这是我的代码:

fo = open("foo.txt", "w")
print ("Name of the file: ", fo.name)

# Assuming file has following 5 lines
# This is 1st line
# This is 2nd line
# This is 3rd line
# This is 4th line
# This is 5th line

seq = ["This is 6th line\n", "This is 7th line"]
# Write sequence of lines at the end of the file.
fo.seek(0, 2)
line = fo.writelines( seq )

# Now read complete file from …
Run Code Online (Sandbox Code Playgroud)

python

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

Python与病毒的多处理

我正在尝试使用Python的pathos将计算指定到单独的进程中,以便使用多核处理器加速它.我的代码组织如下:

class:
   def foo(self,name):
    ...
    setattr(self,name,something)
    ...
   def boo(self):
      for name in list:
         self.foo(name)
Run Code Online (Sandbox Code Playgroud)

由于我在multiprocessing.Pool中遇到酸洗问题,我决定尝试使用pathos.我尝试过,如前几个主题中所述:

import pathos.multiprocessing
Run Code Online (Sandbox Code Playgroud)

但它导致错误:没有模块多处理 - 我在最新的病毒版本中找不到.

然后我尝试修改boo方法:

def boo(self):
 import pathos
 pathos.pp_map.pp_map(self.foo,list)
Run Code Online (Sandbox Code Playgroud)

现在没有抛出错误,但是foo不起作用 - 我的类的实例没有新的属性.请帮助我,因为在花了一天之后,我不知道接下来要去哪里.

python pool multiprocessing pathos

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

是什么导致错误"_pickle.UnpicklingError:无效加载密钥,''."?

我正在尝试在阵列上存储5000个数据元素.这5000个元素存储在现有文件中(因此它不是空的).

但我收到一个错误,我不知道是什么导致它.

在:

def array():

    name = 'puntos.df4'

    m = open(name, 'rb')
    v = []*5000

    m.seek(-5000, io.SEEK_END)
    fp = m.tell()
    sz = os.path.getsize(name)

    while fp < sz:
        pt = pickle.load(m)
        v.append(pt)

    m.close()
    return v
Run Code Online (Sandbox Code Playgroud)

OUT:

line 23, in array
pt = pickle.load(m)
_pickle.UnpicklingError: invalid load key, ''.
Run Code Online (Sandbox Code Playgroud)

python pickle

13
推荐指数
4
解决办法
6万
查看次数

为什么Linux可以在多处理中接受套接字?

此代码在Linux上运行良好,但在Windows下失败(预期).我知道多处理模块用于fork()生成一个新进程,因此父进程拥有的文件描述符(即打开的套接字)由子进程继承.但是,我的理解是,您可以通过多处理发送的唯一类型的数据需要是可选择的.在Windows和Linux上,套接字对象不是pickleable.

from socket import socket, AF_INET, SOCK_STREAM
import multiprocessing as mp
import pickle

sock = socket(AF_INET, SOCK_STREAM)
sock.connect(("www.python.org", 80))
sock.sendall(b"GET / HTTP/1.1\r\nHost: www.python.org\r\n\r\n")

try:
    pickle.dumps(sock)
except TypeError:
    print("sock is not pickleable")

def foo(obj):
    print("Received: {}".format(type(obj)))
    data, done = [], False
    while not done:
        tmp = obj.recv(1024)
        done = len(tmp) < 1024
        data.append(tmp)
    data = b"".join(data)
    print(data.decode())


proc = mp.Process(target=foo, args=(sock,))
proc.start()
proc.join()
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么一个socket对象,一个明显不可拾取的对象,可以通过多处理传递?是不是像Windows那样使用泡菜?

python sockets linux python-multiprocessing

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

为什么map与izip_longest一样有fill = None?

map具有不同长度的输入时,填充值None用于缺少的输入:

>>> x = [[1,2,3,4],[5,6]]
>>> map(lambda *x:x, *x)
[(1, 5), (2, 6), (3, None), (4, None)]
Run Code Online (Sandbox Code Playgroud)

这与以下行为相同:

>>> import itertools
>>> list(itertools.izip_longest(*x))
[(1, 5), (2, 6), (3, None), (4, None)]
Run Code Online (Sandbox Code Playgroud)

是什么原因导致map了这种行为,而不是以下情况?

>>> map(lambda *x:x, *x)
[(1, 5), (2, 6), (3,), (4,)]
Run Code Online (Sandbox Code Playgroud)

...并有一个简单的方法来获得后者的行为或者与一些味道zip还是map

python zip dictionary

8
推荐指数
1
解决办法
637
查看次数

将接受类成员函数作为变量的函数传递给python multiprocess pool.map()

嗨,我一直在为这个早上的大部分时间而苦苦挣扎,希望有人能指出我正确的方向.

这是我目前的代码:

def f(tup):
    return some_complex_function(*tup)

def main():

    pool = Pool(processes=4) 
    #import and process data omitted 
    _args = [(x.some_func1, .05, x.some_func2) for x in list_of_some_class]
    results = pool.map(f, _args)
    print results
Run Code Online (Sandbox Code Playgroud)

我得到的第一个错误是:

> Exception in thread Thread-2: Traceback (most recent call last):  
> File "/usr/lib/python2.7/threading.py", line 551, in __bootstrap_inner
>     self.run()   File "/usr/lib/python2.7/threading.py", line 504, in run
>     self.__target(*self.__args, **self.__kwargs)   File "/usr/lib/python2.7/multiprocessing/pool.py", line 319, in
> _handle_tasks
>     put(task) PicklingError: Can't pickle <type 'instancemethod'>: attribute lookup __builtin__.instancemethod failed
Run Code Online (Sandbox Code Playgroud)

任何帮助将非常感激.

python multiprocessing

7
推荐指数
1
解决办法
4363
查看次数

如何用python和sympy解决多元不等式?

我使用python和Sympy很新...并且使用sympy解决了多变量不等式问题.

假设我在文件中有很多函数,如下所示:

    cst**(sqrt(x)/2)/cst
    exp(sqrt(cst*x**(1/4)))
    log(log(sqrt(cst + exp(x))))
    (y**(1/4) + y)**cst
    sqrt(y/log(x))/cst
    sqrt(cst**log(cst) + x)
    (y**2)**(x/4)
    sqrt(y*sqrt(cst**y))
    log(sqrt(2)*sqrt(cst)*x)
Run Code Online (Sandbox Code Playgroud)

我需要派生它们,设置常量的值并检查是否,对于每个函数f,

    df/dx > 0
    df/dy < 0 
Run Code Online (Sandbox Code Playgroud)

x在[0,+ oo]中,y在[0,1]中.

推导我使用:

    dx = diff(f, x)
    dy = diff(f, y)
Run Code Online (Sandbox Code Playgroud)

然后当我尝试:

    cst = 2 #(for example) 
    solve(dx > 0) 
Run Code Online (Sandbox Code Playgroud)

我收到了这个错误:

    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    File "/usr/local/lib/python2.7/dist-packages/sympy/solvers/solvers.py", line 634, in solve
symbols=symbols)
    File "/usr/local/lib/python2.7/dist-packages/sympy/solvers/inequalities.py", line 374, in reduce_inequalities
    raise NotImplementedError("only univariate inequalities are supported")
    NotImplementedError: only univariate inequalities are …
Run Code Online (Sandbox Code Playgroud)

python sympy inequalities

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

包的分叉有什么好的pip/setuptools兼容版本号?

我正在分发一个python包,我期望包作者在不久的将来合并我的更改.包作者不经常发布,所以我希望我的临时fork作为我的其他一些包的依赖.我需要为我的fork创建一个合适的版本号,它符合pip/setuptools.

让我们说当前的版本是1.6.4,我希望作者的下一个版本是1.6.5.叉的适当版本是1.6.4.1或者1.6.5.dev20140520?两者似乎都符合PEP440,但我也有过最近版本的pip未找到dev版本的经验,除非您专门使用该pre标志.这似乎1.6.4.1是一个不错的选择,但我不知道格式pip会有多快乐N.N.N.N(例如将pip它视为一个pre版本?).

这有什么标准惯例吗?注意,我不想更改作者包的名称,但我确实需要一个临时的fork,我的其他包可以安装,而且问题很少.

python pip setuptools

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

为什么numpy.random和多处理效果不好?

我有一个随机行走功能,numpy.random用于执行随机步骤。该功能walk本身就可以正常工作。同时,它在大多数情况下都可以正常工作,但是与结合使用时multiprocessing,它会失败。为什么multiprocessing会出错?

import numpy as np

def walk(x, n=100, box=.5, delta=.2):
    "perform a random walk"
    w = np.cumsum(x + np.random.uniform(-delta,delta,n))
    w = np.where(abs(w) > box)[0]
    return w[0] if len(w) else n

N = 10

# run N trials, all starting from x=0
pwalk = np.vectorize(walk)
print pwalk(np.zeros(N))

# run again, using list comprehension instead of ufunc
print [walk(0) for i in range(N)]

# run again, using multiprocessing's map
import multiprocessing as mp
p …
Run Code Online (Sandbox Code Playgroud)

python arrays random numpy multiprocessing

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

Pickle.dump变量

我是python中的新手,我想知道是否有解决此问题的方法:

我知道这可能听起来很奇怪,但我想将pickle.dump数据保存到变量中.我开始认为,我可以绕过它,通过制作一个假类而不是写入文件,写入一个变量:

class PickleDatatoVar(object):
def __init__(self):
    self.data = None
def write(self, data):
    self.data = data
def get(self):
    return self.data
Run Code Online (Sandbox Code Playgroud)

然后:

pick = PickleDatatoVar()
pickle.dump(Int, pick)
var = pick.get()
Run Code Online (Sandbox Code Playgroud)

没有任何内容显示为错误,但输出只是一个'.'

那么有没有一种解决方案而不是将其保存在保存为变量的文件中?

python pickle

4
推荐指数
1
解决办法
3439
查看次数

Python 2.7 pickle无法识别numpy多阵列

我需要从协作者加载一组pickle数据.问题是,我似乎需要多阵列.我的代码如下:

f = open('data.p', 'rb')
a = pickle.load(f)
Run Code Online (Sandbox Code Playgroud)

这是错误信息.

ImportError                               Traceback (most recent call last)
<ipython-input-3-17918c47ae2d> in <module>()
----> 1 a = pk.load(f)

/usr/lib/python2.7/pickle.pyc in load(file)
   1382 
   1383 def load(file):
-> 1384     return Unpickler(file).load()
   1385 
   1386 def loads(str):

/usr/lib/python2.7/pickle.pyc in load(self)
    862             while 1:
    863                 key = read(1)
--> 864                 dispatch[key](self)
    865         except _Stop, stopinst:
    866             return stopinst.value

/usr/lib/python2.7/pickle.pyc in load_global(self)
   1094         module = self.readline()[:-1]
   1095         name = self.readline()[:-1]
-> 1096         klass = self.find_class(module, name)
   1097         self.append(klass)
   1098     dispatch[GLOBAL] = …
Run Code Online (Sandbox Code Playgroud)

numpy pickle python-2.7

4
推荐指数
1
解决办法
3773
查看次数