出现 TypeError:无法 pickle _thread.lock 对象

2024-01-22

我正在查询 MongoDB 以获取字典列表,对于列表中的每个字典,我正在对值进行一些比较。根据比较结果,我将字典的值、比较结果和计算出的其他值存储在 mongoDB 集合中。我试图通过调用多处理来做到这一点,但收到此错误。

def save_for_doc(doc_id):

    #function to get the fields of doc
    fields = get_fields(doc_id)
    no_of_process = 5
    doc_col_size = 30000
    chunk_size = round(doc_col_size/no_of_process)
    chunk_ranges = range(0, no_of_process*chunk_size, chunk_size)
    processes = [ multiprocessing.Process(target=save_similar_docs, args= 
    (doc_id,client,fields,chunks,chunk_size)) for chunks in chunk_ranges]
    for prc in processes:
       prc.start()

def save_similar_docs(arguments):

     #This function process the args and saves the results to MongoDB. Does not 
     #return anything as the end result is directly stored.

下面是错误:

 File "H:/Desktop/Performance Improvement/With_Process_Pool.py", line 144, 
 in save_for_doc
   prc.start()

 File "C:\ProgramData\Anaconda3\lib\multiprocessing\process.py", line 105, 
 in start
  self._popen = self._Popen(self)

 File "C:\ProgramData\Anaconda3\lib\multiprocessing\context.py", line 223, 
 in _Popen
   return _default_context.get_context().Process._Popen(process_obj)

 File "C:\ProgramData\Anaconda3\lib\multiprocessing\context.py", line 322, 
 in _Popen
   return Popen(process_obj)

 File "C:\ProgramData\Anaconda3\lib\multiprocessing\popen_spawn_win32.py", 
 line 65, in __init__
reduction.dump(process_obj, to_child)

 File "C:\ProgramData\Anaconda3\lib\multiprocessing\reduction.py", line 60, 
 in dump
        ForkingPickler(file, protocol).dump(obj)

        TypeError: can't pickle _thread.lock objects

这个错误是什么意思?请解释一下,我该如何克服。


文档说您不能将客户端从主进程复制到子进程,您必须在分叉后创建连接。在 fork 进程后,客户端对象无法复制、创建连接。

在 Unix 系统上,多处理模块使用 fork() 生成进程。将 MongoClient 实例与 fork() 一起使用时必须小心。具体来说,MongoClient 的实例不得从父进程复制到子进程。相反,父进程和每个子进程必须创建自己的 MongoClient 实例。

http://api.mongodb.com/python/current/faq.html#id21 http://api.mongodb.com/python/current/faq.html#id21

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

出现 TypeError:无法 pickle _thread.lock 对象 的相关文章

随机推荐

  • 如何将列聚合到 JSON 数组中?

    如何转换如下数据以便将数据存储在 ElasticSearch 中 这是一个 bean 数据集 我将按产品将其聚合到 JSON 数组中 List
  • 使用 MSBuild 从命令行生成用于 ClickOnce 部署的 setup.exe

    我有一个 MSBuild 脚本 用于构建 Windows 窗体应用程序 生成应用程序清单并对其进行签名 然后生成部署清单 该脚本还为我生成publish htm 文件 现在我需要生成 setup exe 文件 到目前为止我还无法弄清楚 VS
  • 如何在Python中使用带有字符异常的多行DOTALL

    我必须在 python 中找到多线模式 所以我使用正则表达式中的 DOTALL 但它发现的内容超出了我的需要 样本文件 if condition 1 some text some text if condition 1 condition
  • 我什么时候应该使用 $wpdb->prepare(如果有的话)?

    我很难弄清楚是否应该使用 wpdb gt prepare我在 WordPress 中进行数据库查询 以防止 SQL 注入等情况 The wpdb 法典 https codex wordpress org Class Reference wp
  • 如何从私有工作组队列接收消息

    我在远程计算机上有一个私有队列 每个人和匿名登录都可以完全访问 尝试接收时会产生以下代码并出错 var qpath FormatName DIRECT TCP xx xx xx xx PRIVATE QueueName var q new
  • 使用 postgresql 查询结果进行字符串替换

    我有一个查询 它总是只返回一个元素作为结果 我想将此查询的结果附加到一个字符串中 我可以使用该字符串进行进一步处理 Example select id from ids where some condition 我想将此 id 附加到字符串
  • simple_form 与 bootstrap 3 的集成

    我已将 bootstrap 更新到版本 3 除了 simple form gem 生成的表单之外 一切正常 我不知道如何将这两者整合在一起 我在 github 项目存储库中也找不到任何有用的建议 那么有人能为我提供解决方案吗 这里有一篇博客
  • 从右到左 TListView

    我正在对 tlistview 进行编程 以便它从右到左显示其列 以便正确显示希伯来语文本 我在表单的创 建方法中使用以下代码 其中 lv 是列表视图 SetWindowLong lv Handle GWL EXSTYLE GetWindow
  • 在 AS3 中动态创建多个只读属性

    我有一堂课目前非常混乱 重复 public class AvFramework extends Object vars private var handler AvHandler private var keyboard AvKeyboar
  • 线程中的服务器(Python3.9.0+aiohttp):RuntimeError:关闭后无法注册atexit

    这段代码 在线程中运行的最小服务器 代码取自here https stackoverflow com questions 51610074 how to run an aiohttp server in a thread 在 Python3
  • 验证上传的文件

    我正在处理一个需要用户上传 Microsoft Word 文档的文档 除了检查文件扩展名是 doc 或 docx 之外 还有其他方法可以验证上传的文件实际上是 Microsoft Word 文档 而不是重命名为 doc 或 docx 扩展名
  • 部分视图点击事件不触发

    我的 aspx 页面 主页 function getEmployeeHours employeeId year month clocked details load Employees GetEmployeeClockedHours emp
  • 使用 pip 安装 Beautiful Soup [重复]

    这个问题在这里已经有答案了 我正在尝试安装美丽的汤 https en wikipedia org wiki Beautiful Soup using pip在 Python 2 7 中 我不断收到错误消息 但不明白为什么 我按照说明安装了p
  • Vim:反向选择

    如果我的线路看起来像这样 abcdefghi 如何反转所选字符 例如 从位置 2 到位置 6 5 个字符 以获得如下结果 a fedcb ghi 我怎样才能猛拉 反转并粘贴到其他地方以获得这样的结果 abcdefghi fedcb 注意 括
  • 保持 C# 控制台应用程序运行的最佳方法是什么[重复]

    这个问题在这里已经有答案了 我开发了一个必须在后台运行的控制台应用程序 应用程序必须不断检查数据库中的新记录 如果返回新记录 则会对其进行处理 我的应用程序目前使用 while true 来保持应用程序运行 使用 while 循环是最好的解
  • 带有 IOS SDK 4.2 的 Xcode 3.2.5 下载 [已关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我在苹果开
  • HTML5、占位符、Webkit 中的行高

    我有一个输入字段
  • 加载微调器会在页面上的每个按钮上激活

    我正在尝试将加载旋转器集成到按钮中 这也非常有效 问题 如果我单击一个按钮 微调器将对每个其他按钮做出响应 我该如何纠正这个问题 My code
  • 如何在 C++ 数据结构中存储 Fortran 风格的长字符标量

    我正在使用需要字符标量的旧版 Fortran 库PATH作为子例程的参数 原来的界面是 SUBROUTINE MINIMAL VAR1 PATH CHARACTER LEN 4096 PATH 我需要能够从 C 调用它 因此我进行了以下更改
  • 出现 TypeError:无法 pickle _thread.lock 对象

    我正在查询 MongoDB 以获取字典列表 对于列表中的每个字典 我正在对值进行一些比较 根据比较结果 我将字典的值 比较结果和计算出的其他值存储在 mongoDB 集合中 我试图通过调用多处理来做到这一点 但收到此错误 def save