当前位置: 首页 > 面试题库 >

我们需要腌任何可腌的

容俊豪
2023-03-14
问题内容

最近,有人提出了一些Python代码试图通过使用腌制过程促进分布式计算的问题。显然,该功能在历史上是可能的,但是出于安全原因,该功能被禁用。第二次尝试通过套接字传输功能对象时,仅传输了引用。如果我错了,请纠正我,但我不认为此问题与Python的后期绑定有关。假定不能腌制进程和线程对象,是否有任何方法可以传输可调用对象?我们希望避免为每个作业传输压缩的源代码,因为这可能会使整个尝试变得毫无意义。出于可移植性原因,只能使用Python核心库。


问题答案:

您可以编组字节码并腌制其他函数

import marshal
import pickle

marshaled_bytecode = marshal.dumps(your_function.func_code)
# In this process, other function things are lost, so they have to be sent separated.
pickled_name = pickle.dumps(your_function.func_name)
pickled_arguments = pickle.dumps(your_function.func_defaults)
pickled_closure = pickle.dumps(your_function.func_closure)
# Send the marshaled bytecode and the other function things through a socket (they are byte strings).
send_through_a_socket((marshaled_bytecode, pickled_name, pickled_arguments, pickled_closure))

在另一个python程序中:

import marshal
import pickle
import types

# Receive the marshaled bytecode and the other function things.
marshaled_bytecode, pickled_name, pickled_arguments, pickled_closure = receive_from_a_socket()
your_function = types.FunctionType(marshal.loads(marshaled_bytecode), globals(), pickle.loads(pickled_name), pickle.loads(pickled_arguments), pickle.loads(pickled_closure))

并且必须在接收该函数的脚本中重新创建该函数内部对全局变量的任何引用。

在Python 3,功能属性使用的是__code____name____defaults____closure__

请大家注意,send_through_a_socketreceive_from_a_socket实际上不存在的,你应该通过实际的代码通过插座替换它们传送数据。



 类似资料:
  • 问题内容: 我的代码(我无法使用’pickle’): 打印: 谁能告诉我如何使用。 问题答案: 你想做什么?这个对我有用: 所以这将打印: 如果需要setstate: 打印:

  • 下面链接的文档似乎表明可以对顶级类及其实例进行pickle处理。但根据我对前一个问题的回答来看,这似乎不正确。在我发布的脚本中,pickle接受类对象并写入文件,但这没有用。 这是我的问题:这个文档是错误的,还是有更微妙的东西我不明白?另外,在这种情况下,泡菜是否应该生成某种错误消息? https://docs . python . org/2/library/pickle . html # wh

  • 问题内容: Windows上的Python 3.5,请尝试以下操作: 引发异常: multiprocessing.Process的子类抛出相同的异常: 问题答案: 这样的事情应该起作用: 基本上,a需要a ,并且由于任何原因,实例被腌制时都不会保存(例如,不在方法中)。如果您需要更多的状态(即其他并从方法),那么你就需要从扩展的返回值上述功能。(请注意,如果您使用的是python 2.x,则相应的

  • 问题内容: 我有一个defaultdict看起来像这样: 问题是,我不能使用cPickle腌制它。我在这里找到的解决方案之一是使用模块级函数而不是lambda。我的问题是,什么是模块级功能?如何在cPickle中使用字典? 问题答案: 除了Martijn的解释之外: 模块级函数是在模块级定义的函数,这意味着它不是类的实例方法,它不嵌套在另一个函数中,并且它是带有名称的“真实”函数,而不是lambd

  • Segmentfault 存在的意义是什么? 尝试着 Stackoverflow 上找到过很多的答案

  • 我用PHPass散列密码已经很久了。我承认仍然有一些我不完全理解(或忽略)的东西来正确地散列密码,所以今天我查看了所有我能找到的关于它的信息。 回顾PHPass文档,我已经进入了这个: 除了实际的哈希之外,phpass 在对新密码或密码进行哈希处理时会透明地生成随机 salt,并将哈希类型、salt 和密码拉伸迭代计数编码到它返回的“hash 编码字符串”中。当phpass根据存储的哈希对密码或密