子类化 multiprocessing.managers.BaseProxy

2024-04-20

我在尝试实施新的方法时遇到了一些麻烦defaultdict代理对象。这文档 https://docs.python.org/3/library/multiprocessing.html#multiprocessing.managers.BaseProxy有点害怕,所以我不知道如何正确地解决这个问题。

我想添加一个defaultdict到可用的类型列表Manager实例。您不能使用Manager.register股票方法multiprocessing.Manager所以我从以下位置创建了自己的存根管理器multiprocessing.mangers.BaseManager

class Manager(BaseManager):
    pass

然后我创建了我的子类multiprocessing.managers.BaseProxy容纳defaultdict(我最初尝试使用花药存根,它将对两者进行子类化defaultdict and BaseProxy但这似乎不起作用。这是我目前拥有的:

class ProxyDefaultDict(BaseProxy):
    def __init__(self, default_factory=None, *args, **kwargs):
        self.__data = defaultdict(default_factory)
        super().__init__(*args, **kwargs)

    def _callmethod(self, methodname, args=(), kwds={}):
        return getattr(self.__data, methodname)(*args, **kwds)

    def _getvalue(self):
        return self.__data.copy()

    def __repr__(self):
        return self.__data.__repr__()

    def __str__(self):
        return self.__data.__str__()

Manager.register('defaultdict', ProxyDefaultDict)

最终目标是拥有一个共享字典,可以跨进程和线程安全地共享带键锁。这是我想象的如何初始化的示例:

if __name__ == '__main__':
    m = Manager()
    d = m.defaultdict(m.Lock)
    with d['named_lock']:
        print('holding the lock')

但是,我遇到了一些问题:

  1. BaseManager 的子类似乎只能通过上下文管理器来初始化,即with Manager() as m。我会用哪个m = Manager()在这种情况下 - 作为multiprocessing.Manager允许。不是世界末日,而是更好奇为什么会出现这种情况,以及如果这是我做错事的迹象。

  2. 子类化multiprocessing.managers.BaseManager也意味着您丢失了默认寄存器值multiprocessing.Manager。在这种情况下,我需要为我的经理重新注册 ProxyLock(我也不确定执行此操作的预期方式)。仅子类化是否安全multiprocessing.Manager直接地。

  3. 最后,我的ProxyDefaultDict似乎不允许我干净地覆盖它__init__。我厌倦了不打电话给BaseProxy.__init__当子类化时。问题是 BaseProxy 也接受位置参数。我想解决这个问题的方法是default_factoryargument 仅是一个键控参数,但这会将预期的接口更改为defaultdict让我假设我又在这里做错了什么。其他类型如Manager.Lock似乎能够接受位置参数。

谢谢你的帮助。


查看源代码后,对其进行一些修改即可让我毫无问题地获得 defaultdict 类型代理(基于内置 DictProxy 的创建方式)。

from collections import defaultdict

from multiprocessing.managers import MakeProxyType, SyncManager

DefaultDictProxy = MakeProxyType("DefaultDictProxy", [
    '__contains__', '__delitem__', '__getitem__', '__len__',
    '__setitem__', 'clear', 'copy', 'default_factory', 'fromkeys',
    'get', 'items', 'keys', 'pop', 'popitem', 'setdefault',
    'update', 'values'])

SyncManager.register("defaultdict", defaultdict, DefaultDictProxy)
# Can also create your own Manager here, just using built in for simplicity

if __name__ == '__main__':
    with SyncManager() as sm:
        dd = sm.defaultdict(list)
        print(dd['a'])
        # []

就我个人而言,我发现通过使用已经提供的工具很方便,甚至不需要担心如何自己对其进行子类化。

但是,我认为这不会允许您创建您正在寻找的默认锁定方案。多处理锁被设计为仅继承,并且通常锁不能被腌制,这是通过代理传输的数据类型的要求。例子:

    from multiprocessing import Lock

    m = SyncManager()
    m.start()
    d = m.defaultdict(Lock)
    print(d['named_lock'])
    m.shutdown()

会引发运行时错误:

RuntimeError: Lock objects should only be shared between processes through inheritance
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

子类化 multiprocessing.managers.BaseProxy 的相关文章

  • 如何以 HDF5 格式提供 caffe 多标签数据?

    我想将 caffe 与矢量标签一起使用 而不是整数 我检查了一些答案 似乎 HDF5 是更好的方法 但后来我陷入了这样的错误 precision layer cpp 34 检查失败 outer num inner num bottom 1
  • 为什么 urllib2 出现 urllib2.HTTPError 而 urllib 没有错误?

    我有以下简单的代码 import urllib2 import sys sys path append BeautifulSoup BeautifulSoup 3 1 0 1 from BeautifulSoup import page h
  • 隐藏控制台并执行 python 脚本

    我正在尝试使用 pyinstaller 在 Windows 10 上使用 pyqt5 模块编译在 python 3 中构建的 python 脚本 该脚本在运行时隐藏窗口 为了编译我的脚本 我执行了以下命令 pyinstaller onefi
  • 在 django 中构建动态表单

    我正在尝试根据存储在数据库中的字段及其定义动态构建一个表单 在我的数据库中 我定义了 1 个带有一些标签的复选框和 1 个带有一些标签的文本字段 如何根据数据库中的数据在我的视图中动态构建表单 Thanks 以下是我在 EuroDjango
  • 从 SQL Server 中调用 Python 文件

    我的文件名中有 Python 脚本 C Python HL py 在此 Python 脚本中 有预测模型以及对 SQL 数据库中某些表的更新 我想将此文件称为 SQL 作业 我怎样才能做到这一点 这个问题不一样 如何在 SQL Server
  • 通过 pyodbc 连接到 Azure SQL 数据库

    我使用 pyodbc 连接到本地 SQL 数据库 该数据库工作正常 SQLSERVERLOCAL Driver SQL Server Native Client 11 0 Server localdb v11 0 integrated se
  • 这是我尝试安装 pip3 时得到的结果

    这是我尝试安装 pip3 时得到的结果 sudo apt get install python3 pip Reading package lists Done Building dependency tree Reading state i
  • 使用 asyncore 读取网站

    我想异步阅读一个网站 据我所知 这是不可能的 urllib 现在我尝试使用普通套接字进行阅读 但是 HTTP 给我带来了麻烦 我遇到了各种时髦的编码 例如传输编码 分块 必须手动解析所有这些东西 我现在想编码 C 而不是 python 难道
  • 使用python同时播放两个正弦音

    我正在使用 python 来播放正弦音 音调基于计算机的内部时间 以分钟为单位 但我想根据秒同时播放一个音调 以获得和谐或双重的声音 这就是我到目前为止所拥有的 有人能指出我正确的方向吗 from struct import pack fr
  • 通过 Python 在 PostgreSQL 中的 unicode 字符串中是否允许空字节?

    unicode 字符串中是否允许空字节 我不问 utf8 我的意思是 unicode 字符串的高级对象表示 背景 我们通过 Python 在 PostgreSQL 中存储包含空字节的 unicode 字符串 如果我们再次读取字符串 字符串会
  • Windows Server / Datacenter:设置 CPU 关联性 > 64 个核心

    SetThreadAffinityMask 允许为 64 个逻辑核心 处理器 设置关联掩码 但是 Windows Datacenter 最多可以有 64 个 CPU 每个 CPU 都有多个内核 请参阅here http social tec
  • 可重用的 Tensorflow 卷积网络

    我想重用来自Tensorflow 专业人士的 MNIST CNN 示例 http www tensorflow org tutorials mnist pros index md 我的图像尺寸为 388px X 191px 只有 2 个输出
  • 使用 Beautifulsoup 解析时保持 XML 文件的缩进

    我正在使用 BS4 解析 XML 文件并尝试将其写回新的 XML 文件 输入文件
  • 可变和不可变类变量如何初始化?

    运行下面的示例代码 class S i 0 a def init self self i 1 self a append 1 s1 S print s1 i s1 a s2 S print s2 i s2 a 输出将是 1 1 1 1 1
  • 调试 python Web 服务

    我正在使用找到的说明here http www diveintopython net http web services user agent html 尝试检查发送到我的网络服务器的 HTTP 命令 但是 我没有看到按照教程中的建议在控制
  • captureWarnings 设置为 True 不会捕获警告

    我想记录所有警告 我以为这样的设定captureWarnings to True应该可以解决问题 但事实并非如此 代码 import logging import warnings from logging handlers import
  • pip:证书失败,但curl 有效

    我们在客户端安装了根证书 https 连接适用于curl 但如果我们尝试使用pip 它失败 Could not fetch URL https installserver 40443 pypi simple pep8 There was a
  • Tensorflow:提要字典错误:您必须为占位符张量提供值

    我有一个错误 我无法找出原因 这是代码 with tf Graph as default global step tf Variable 0 trainable False images tf placeholder tf float32
  • 继承自 NumPy 数组的类如何更改其自身的值?

    我有一个继承自 NumPy n 维数组的简单类 我想要该类的两个方法可以更改该类实例的数组值 其中一种方法应将类实例的数组设置为类实例的列表数据属性的值 另一种方法应将一些列表值附加到类实例的数组中 我不确定如何实现这一点 但我的尝试如下
  • 每行中最后一次出现 True 的索引

    我有一个二维数组 a False False False False False True True True True True True True True True True True True True True True True

随机推荐

  • UITableView 的本地化索引

    我正在尝试为我的 UITableView 使用本地化索引 就像 iPhone 的联系人应用程序一样 这是我返回字符数组的方法 NSArray sectionIndexTitlesForTableView UITableView tableV
  • 如何停止对辅助隐式加载 DLL 的 DLL 劫持

    例如 COMDLG32 DLL 隐式链接到以下系统 DLL 以及其他 xmllite dll dll srvcli dll wkscli dll 链接信息库 netutils dll 微星 dll 由于这些是由操作系统隐式加载的 而不是使用
  • 如何重定向 Visual Studio 调试器的输出?

    在 Visual Studio 2008 中 我可以指定命中断点时要打印的消息 通过右键单击断点并选择 命中时 当程序运行时 这些消息出现在输出窗口中 我想知道有什么办法可以将它们重定向到文件吗 指定 gt file txt作为程序的命令参
  • 休眠批量插入

    这是我在数据库中插入批次的代码 Override public void addMultiple session get session tx session beginTransaction for int i 0 i lt 100 i
  • 错误:ValueFactory 尝试访问此实例的 Value 属性

    Error 源文件 c Projects WaterfrontSeattle org src Orchard Logging OrchardLog4netLogger cs Line 63 来源错误 Line 61 Load the log
  • 升级到Numpy 1.8.2后,ImportError:无法导入名称多数组

    我刚刚使用 Anaconda 的 Spyder 在 64 位 Windows 机器上升级到 Numpy 1 8 2 我使用了命令 conda update numpy 它安装了它 在此之前我有numpy 1 7 1 并且我在另一个路径中也有
  • 帮助--LibSVM 的准确率达到 100%?

    名义上这是一个好问题 但我很确定这是因为发生了一些有趣的事情 作为上下文 我正在研究面部表情 识别空间中的一个问题 因此获得 100 的准确度似乎令人难以置信 并不是说在大多数应用程序中这是合理的 我猜测数据集中存在一些一致的偏差 这使得
  • 删除行以及引用已删除行的其他行

    我正在使用 PostgreSQL 并且我有一张表family像这样 id name parent id 1 adam 0 2 eva 0 3 peter 2 4 pan 3 现在 当我删除这个人时 我也希望孩子们也被删除 例如删除WHERE
  • 重命名 APK 内的包名称

    我创建了一个AIR app目前市场上有这种产品 要更新应用程序 显然我必须保留相同的包名称 我的第一个版本是使用以下方式打包的Eclipse使用 ADT 插件 现在可以使用AIR 3 0 本机扩展 ANE 当我第一次开发该应用程序时不可用
  • 在 django 平面中嵌入tinyMCE

    我在用着django tinymce https github com aljosa django tinymce 我想知道如何将其嵌入到管理面板的平面中 来自项目的自述文件 将tinymce添加到项目的settings py中的INSTA
  • 节点 v7.9.0 https 的 ERR_SSL_VERSION_OR_CIPHER_MISMATCH

    此代码在node v7 9 0 Electron当前使用的版本 中创建一个https服务器 并监听端口8000 require https createServer req res gt res writeHead 200 res end
  • 非抢占式 最早截止时间优先调度

    我正在开发任务调度程序 我想使用 EDF 调度 我需要安排的任务集仅包含截止日期等于其周期的任务 并且必须定期安排任务 我遇到的问题是任务一旦开始执行就无法中断 我知道 仅当任务抢占式地在单个处理器上调度时 EDF 才是最佳调度算法 因此我
  • 使用 Python 将 USB 驱动器格式化为 FAT32

    我正在尝试创建一个可启动 USB 驱动器 需要将 USB 格式化为 FAT32 以便我可以将所有文件提取到其中 是否可以使用纯Python格式化USB驱动器 我可以在不使用外部命令的情况下将其格式化为 FAT32 吗 我知道在 bash 中
  • 读取和打印手臂组件中的字符串

    我正在使用 ARMSim 刚刚开始学习汇编 所以如果我看起来一无所知 请原谅我 但我正在尝试从输入文件中读取字符串 然后将其打印到输出屏幕 到目前为止我有 equ SWI Open 0x66 open a file equ SWI Clos
  • Apple 已经发布了 Touch Bar 的 API 了吗?

    苹果刚刚发布了带有触摸栏的新款 MacBook 是否有应用程序开发人员可以使用的 API 我好像还没有在网上找到 是否支持通过JavaScript从浏览器访问 WebKit 有强制触摸 API 可以在四次运行的触摸板上支持它 所以我猜如果他
  • IronPython - 运行 Excel 宏

    我正在运行 TIBCO Spotfire v4 它内置了 IronPython 希望运行一个 Spotfire 报告来导出 xls 文件 该部分已完成 寻找一个脚本来打开 Excel 文件并运行宏以便能够格式化该文件 这是我找到并尝试使用的
  • 何时/如何以编程方式设置 Hibernate 使用的 Ehcache 大小

    我通过添加以下内容在 Hibernate 4 3 11 中启用了二级缓存 config setProperty hibernate cache region factory class org hibernate cache ehcache
  • ActionBarCompat - 应用程序图标操作(单击)在 4.0 设备上不起作用

    我有这个问题Android ActionBar 兼容性 http developer android com resources samples ActionBarCompat index html项目 在 Android 4 0 的模拟器
  • 在 Zookeeper 中创建路径的最有效方法,其中路径的根元素可能存在也可能不存在?

    想象一条路径 root child1 child2 child3 想象一下 在动物园管理员中 可能存在其中的一部分 比如 root child1 Zookeeper 中没有等效的 mkdir p 此外 如果任何一个操作失败 ZooKeepe
  • 子类化 multiprocessing.managers.BaseProxy

    我在尝试实施新的方法时遇到了一些麻烦defaultdict代理对象 这文档 https docs python org 3 library multiprocessing html multiprocessing managers Base