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

2023-12-29

我已经多次研究过这个问题,但还没有找到适合我的情况或我理解的解决方法,所以请耐心等待。

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

例如,假设我有这个:

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)

这会产生以下错误:

Can't pickle <type 'function'>: attribute lookup __builtin__.function failed

我正在考虑全局变量,但我担心我必须定义太多全局变量,这可能会大大减慢我的程序速度。 有没有无需重组整个程序的解决方法?


你可以使用pathos.multiprocessing,这是一个分叉multiprocessing使用的是dill序列化器而不是pickle. dill可以序列化Python中的几乎任何东西。然后,无需编辑您的代码。

>>> from pathos.multiprocessing import ProcessingPool as Pool
>>> 
>>> def calculate(x):
...   def domath(y):
...     return x*y
...   return Pool().map(domath, range(3))
... 
>>> calculate(2)
[0, 2, 4]

你甚至可以对它发疯……因为大多数东西都是腌制的。不需要你必须用纯来烹饪的奇怪的非Pythonic解决方案multiprocessing.

>>> class Foo(object):
...   def __init__(self, x):
...     self.x = x
...   def doit(self, y):
...     return ProcessingPool().map(self.squared, calculate(y+self.x))
...   def squared(self, z):
...     return z*z
... 
>>> def thing(obj, y):
...   return getattr(obj, 'doit')(y)
... 
>>> ProcessingPool().map(thing, ProcessingPool().map(Foo, range(3)), range(3))
[[0, 0, 0], [0, 4, 16], [0, 16, 64]]

Get pathos here: https://github.com/uqfoundation https://github.com/uqfoundation

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

如何在不处于顶层的情况下解决 python 多处理的 pickling 错误? 的相关文章

  • 如何将base64字符串直接解码为二进制音频格式

    音频文件通过 API 发送给我们 该文件是 Base64 编码的 PCM 格式 我需要将其转换为 PCM 然后再转换为 WAV 进行处理 我能够使用以下代码解码 gt 保存到 pcm gt 从 pcm 读取 gt 保存为 wav decod
  • Flask+Nginx+uWSGI:导入错误:没有名为站点的模块

    我安装为http www reinbach com uwsgi nginx flask virtualenv mac os x html http www reinbach com uwsgi nginx flask virtualenv
  • Python有条件求解时滞微分方程

    我在用dde23 of pydelay包来求解延迟微分方程 我的问题 如何有条件地编写方程 例如目标方程有两个选项 when x gt 1 dx dt 0 25 x t tau 1 0 pow x t tau 10 0 0 1 x othe
  • boto3 资源(例如 DynamoDB.Table)的类型注释

    The boto3库提供了几种返回资源的工厂方法 例如 dynamo boto3 resource dynamodb Table os environ DYNAMODB TABLE 我想注释这些资源 以便我可以获得更好的类型检查和完成 但我
  • Python在postgresql表中查找带有单引号符号的字符串

    我需要从 psql 表中查找包含多个单引号的字符串 我当前的解决方案是将单引号替换为双单引号 如下所示 sql query f SELECT exists SELECT 1 FROM table name WHERE my column m
  • 如何在 PyCharm 4.5.2 中使用 PyPy 作为标准/默认解释器?

    如何在 PyCharm 4 5 2 中使用 PyPy 作为标准 默认解释器 一切都在 Ubunutu 14 10 下运行 并且 pypy 已经安装 您可以在项目的设置下进行配置 这个官方文档直接涵盖了 https www jetbrains
  • 了解 Python 中的酸洗

    我最近接到一项作业 需要以腌制形式放置一本字典 其中每个键引用一个列表 唯一的问题是我不知道腌制形式是什么 谁能给我指出一些好的资源的正确方向来帮助我学习这个概念 pickle 模块实现了一个基本但强大的算法 用于序列化和反序列化 Pyth
  • 当单词以“|”分隔时如何读取文件(埃因霍温)?

    在Python中 我有一个文件 其中的单词由 例如 city state zipcode 我的文件阅读器无法区分单词 另外 我希望我的文件阅读器从第 2 行而不是第 1 行开始 如何让我的文件阅读器分隔单词 import os import
  • 更改 Altair 中的构面标题位置?

    如何将方面标题 在本例中为年份 移动到每个图的上方 默认值似乎位于图表的一侧 这可以轻易改变吗 import altair as alt from vega datasets import data df data seattle weat
  • numpy 使用 datetime64 进行数字化

    我似乎无法让 numpy digitize 与 datetime64 一起使用 date bins np array np datetime64 datetime datetime 2014 n 1 s for n in range 1 1
  • 如何将 self 传递给装饰器?

    我该如何通过self key下面进入装饰器 class CacheMix object def init self args kwargs super CacheMix self init args kwargs key func Cons
  • Python Fabric - 未找到主机。请指定用于连接的(单个)主机字符串:

    如何获取 找不到主机 请指定用于连接的 单个 主机字符串 面料如何解决 def bootstrap host ec2 54 xxx xxx xxx compute 1 amazonaws com env hosts host env use
  • Apache Spark 中的高效字符串匹配

    我使用 OCR 工具从屏幕截图中提取文本 每个大约 1 5 句话 然而 当手动验证提取的文本时 我注意到时不时会出现一些错误 鉴于文本 你好 我真的很喜欢 Spark 我注意到 1 像 I 和 l 这样的字母被 替换 2 表情符号未被正确提
  • PySide6.1 与 matplotlib 3.4 不兼容

    当我只安装PySide6时 GUI程序运行良好 但是一旦我安装了matplotlib及其依赖包 包括pyqt5 则GUI程序将无法运行并输出以下错误消息 This application failed to start because no
  • 如何使用 Django 项目设置 SQLite?

    我已阅读 Django 文档 仅供参考 https docs djangoproject com en 1 3 intro tutorial01 https docs djangoproject com en 1 3 intro tutor
  • django-admin.py makemessages 不起作用

    我正在尝试翻译一个字符串 load i18n trans Well Hello there how are you to Hola amigo que tal 我的 settings py 文件有这样的内容 LOCALE PATHS os
  • Python 类型安全吗?

    根据维基百科 https en wikipedia org wiki Type system Type safety and memory safety 如果一种语言不允许违反类型系统规则的操作或转换 计算机科学家就认为该语言是 类型安全的
  • 解析根元素内元素之间的 XML 文本

    我正在尝试用 Python 解析 XML 以下是 XML 结构的示例 a aaaa1 b bbbb b aaaa2 a
  • Python 声音(“铃声”)

    我想让一个 python 程序在完成任务时通过发出嘟嘟声来提醒我 目前 我使用import os然后使用命令行语音程序说 进程完成 我更愿意它是一个简单的 铃 我知道有一个函数可以用于Cocoa apps NSBeep 但我认为这与此没有太
  • 缓存 Flask-登录 user_loader

    我有这个 login manager user loader def load user id None return User query get id 在我引入 Flask Principal 之前它运行得很好 identity loa

随机推荐

  • 从 4 个整数的列表生成最大 HH:MM [重复]

    这个问题在这里已经有答案了 注意 另一个问题是这个问题的重复 如果我这个问题比那个问题早 6 个月发布 那么我的问题怎么会是重复的呢 我有 4 个非负整数 a b c d 它们都小于或等于 9 我必须以 24 小时格式返回时钟上可以显示的最
  • 如何构建访问控制列表 (ACL) 的数据模型

    当您只处理对离散资源具有一定访问级别的离散用户时 如何对充当访问控制列表 ACL 的数据库表进行建模是相当明显的 像这样的事情 TABLE acl user id INT resource id INT access type INT 其中
  • jenkins python 模块导入错误

    我已经在虚拟机中安装了 jenkins 模块 但仍然无法导入该模块并使用 Python 2 7 5 默认 2014 年 6 月 17 日 18 11 42 GCC 4 8 2 20140120 红帽 4 8 2 16 在 linux2 上
  • 如何避免 R 中的双重“for”循环

    我必须对数据框 ddf 的所有列组合执行函数 我通常这样做 myfunction lt function col1 col2 print aov col1 col2 ddf data frame first 1 3 second lette
  • 将 Django TimeField 中的时间乘以 float

    我正在尝试将当前表示为字符串的时间读取到 Python 2 7 中的 Django TimeField 模型中 并同时通过浮点数对其进行缩放 例如 00 31 14 1 0617 00 29 20 我已成功读取时间并将其存储到模型中 但无法
  • 类循环引用的原因?

    我知道循环引用 A 类持有 B 类 B 类持有 A 类 但由于我的编程还不够 我很难找到使用它们的理由 我想知道人们是否可以给我一些例子并解释使用它们的充分理由 就我而言 现在我正在查看 2D 源代码教程 用户创建了一个相互引用的 Crea
  • ggplot 相当于 matplot

    ggplot2 中是否有等效的函数来绘制该数据集 我使用 matplot 并读到可以使用 qplot 但它确实不起作用 ggplot matplot https stackoverflow com questions 12047787 gg
  • 是否应该使用实体类作为请求主体[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 假设我必须保存一个实体 在本例中为 Book 我有下一个代码 RestController RequestMapping books publi
  • 有没有办法在纯函数中放置一些不纯的代码?

    IO 就像Maybe 只是一个例子Monad 另一方面 我们有所有的数据构造函数Maybe Just and Nothing 但没有构造函数IO Reader and Writer也不要导出构造函数 它们具有返回此类型实例的函数 reade
  • NodeJS + Express:如何保护 URL

    我正在使用最新版本的 NodeJS 和 ExpressJS 用于 MVC 我通常这样配置我的休息路径 例如 app get archive routes archive 现在我想要我的 admin 要保护的 URL 集 我的意思是我只需要简
  • isset 和 !empty 未通过对上传文件的检查

    我有一个上传表单 其中包含要上传的文件 我遇到的问题是 即使没有上传文件 if isset FILES OR if empty FILES 仍然成功通过 FILES HTTP POST FILES if POST type photo is
  • 刷新页面后如何保持单个复选框保持选中状态?

    HTML 代码 div class wrap h3 Background Swap h3 div
  • 找不到第三方模块的声明文件 - 如何声明和解决这些错误

    我正在开发一个使用 typescript 的项目 使用 vue cli 3 0 生成 当我导入第三方模块时 出现如下错误 Could not find a declaration file for module vue slider com
  • UIVisualEffectView 在不同设备上呈现不同的效果

    In my ViewController swift var img UIImageView image UIImage named puddles img frame view bounds view addSubview img var
  • C 预处理器是否删除“&*”的实例?

    我正在玩gcc并尝试了以下代码 int A 42 int B A int C B And C A 正如预期的那样 但是当我尝试时 int B NULL int C B 事实证明C NULL 并且没有段错误 所以 B实际上并没有解除引用B在获
  • 如何使用 chainlink oracle 读取 JSON 文件

    我改变了链环API消费者示例 https docs chain link docs make a http get request 读取一个 JSON 文件 其中包含我希望带入并存储在智能合约中的数据 pragma solidity 0 6
  • 过滤 Python 生成器表达式中的值

    我有一本字典dct我希望对其每个值进行求和 前提是它们对应的键存在于指定列表中lst 到目前为止我使用的代码是 sum dct k for k in lst 在上面的生成器表达式中我想处理KeyError如果在字典中找不到列表中的键 我似乎
  • Ansible:无法将 /etc/ansible/hosts 解析为清单源

    我是新来的ansible 得到以下问题 我能够 ssh 进入我的客户端计算机 但无法运行 playbook 得到下面的错误 WARNING Unable to parse etc ansible hosts as an inventory
  • 如何将 json 数据绑定到现有视图模型 - mvc5

    我有一个很长的强类型表单 其输入与 viewmodel 作为 html 助手绑定 而我有一个非强类型的表 它是在用户单击 添加 按钮时生成的 并且我将其数据收集为 json 如何将json数据映射到viewmodel并作为一个单元发送到aj
  • 如何在不处于顶层的情况下解决 python 多处理的 pickling 错误?

    我已经多次研究过这个问题 但还没有找到适合我的情况或我理解的解决方法 所以请耐心等待 基本上 我有一个功能的分层组织 这阻止了我在顶层进行多重处理 不幸的是 我不相信我可以更改程序的布局 因为我需要在初始输入后创建的所有变量 例如 假设我有