相关疑难解决方法(0)

是否有一种简单的方法来挑选python函数(或以其他方式序列化其代码)?

我正在尝试通过网络连接传输功能(使用asyncore).是否有一种简单的方法来序列化python函数(在这种情况下,至少,没有副作用)这样的传输?

理想情况下,我希望有一对类似的功能:

def transmit(func):
    obj = pickle.dumps(func)
    [send obj across the network]

def receive():
    [receive obj from the network]
    func = pickle.loads(s)
    func()
Run Code Online (Sandbox Code Playgroud)

python function pickle

90
推荐指数
7
解决办法
5万
查看次数

将缓存存储在Python> = 3.2中的functools.lru_cache文件中

@functools.lru_cache在Python 3.3中使用.我想将缓存保存到文件中,以便在重新启动程序时恢复它.我该怎么办?

编辑1可能的解决方案:我们需要挑选任何类型的可调用

问题酸洗__closure__:

_pickle.PicklingError: Can't pickle <class 'cell'>: attribute lookup builtins.cell failed
Run Code Online (Sandbox Code Playgroud)

如果我尝试在没有它的情况下恢复功能,我会得到:

TypeError: arg 5 (closure) must be tuple
Run Code Online (Sandbox Code Playgroud)

python memoization python-3.x

20
推荐指数
3
解决办法
5398
查看次数

Python分布式计算(工作)

我正在使用旧线程发布新代码,试图解决同样的问题.什么构成安全的泡菜?这个?

sock.py

from socket import socket
from socket import AF_INET
from socket import SOCK_STREAM
from socket import gethostbyname
from socket import gethostname

class SocketServer:
  def __init__(self, port):
    self.sock = socket(AF_INET, SOCK_STREAM)
    self.port = port
  def listen(self, data):
    self.sock.bind(("127.0.0.1", self.port))
    self.sock.listen(len(data))
    while data:
      s = self.sock.accept()[0]
      siz, dat = data.pop()
      s.send(siz)
      s.send(dat)
      s.close()

class Socket:
  def __init__(self, host, port):
    self.sock = socket(AF_INET, SOCK_STREAM)
    self.sock.connect((host, port))
  def recv(self, size):
    return self.sock.recv(size)
Run Code Online (Sandbox Code Playgroud)

pack.py

#http://stackoverflow.com/questions/6234586/we-need-to-pickle-any-sort-of-callable
from marshal import dumps as marshal_dumps
from pickle …
Run Code Online (Sandbox Code Playgroud)

python sockets distributed-computing pickle multiprocessing

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

如何在不处于顶层的情况下解决python多处理的酸洗错误?

我已经多次研究过这个问题,但是没有找到一个可以在我的情况下工作的解决方法,或者我理解的解决方法,所以请耐心等待.

基本上,我有一个功能的层次组织,这阻止我在顶层进行多处理.不幸的是,我不相信我可以改变程序的布局 - 因为我需要在初始输入后创建的所有变量.

例如,说我有这个:

import multiprocessing

  def calculate(x):
    # here is where I would take this input x (and maybe a couple more inputs)
    # and build a larger library of variables that I use further down the line

    def domath(y):
      return x * y

    pool = multiprocessing.Pool(3)
    final= pool.map(domath, range(3))

calculate(2)
Run Code Online (Sandbox Code Playgroud)

这会产生以下错误:

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

我在考虑全局,但我担心我必须定义太多,这可能会使我的程序减慢很多.是否有任何解决方法而无需重组整个计划?

python pickle multiprocessing python-multiprocessing

7
推荐指数
2
解决办法
5154
查看次数

如何保护Python分布式计算层

这些模块旨在促进跨多台计算机的计算能力层.有哪些一种或多种经过验证的方法可以防止欺骗性数据包?如何最好地对传输的可调用引用的任何未包含的对象进行深层复制?函数对象是封装客户端作业的最佳方法吗?最后:这段代码可以改进吗?邮件脚本:请原谅我的最后一个问题.我需要兑现我的声誉.

sock.py

from socket import socket
from socket import AF_INET
from socket import SOCK_STREAM
from socket import gethostbyname
from socket import gethostname

class SocketServer:
  def __init__(self, port):
    self.sock = socket(AF_INET, SOCK_STREAM)
    self.port = port
  def send(self, tdata):
    self.sock.bind(("127.0.0.1", self.port))
    self.sock.listen(len(tdata))
    while tdata:
      s = self.sock.accept()[0]
      for x in tdata.pop(): s.send(x)
      s.close()
    self.sock.close()

class Socket:
  def __init__(self, host, port):
    self.sock = socket(AF_INET, SOCK_STREAM)
    self.sock.connect((host, port))
  def recv(self, size):
    return self.sock.recv(size)
  def close(self):
    self.sock.close()
Run Code Online (Sandbox Code Playgroud)

pack.py

#http://stackoverflow.com/questions/6234586/we-need-to-pickle-any-sort-of-callable
from marshal import dumps as marshal_dumps …
Run Code Online (Sandbox Code Playgroud)

python hash distributed-computing

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