Python multiprocess pool模块报错pickling error问题解决方法分析

作者:Arkenstone 时间:2021-02-21 04:44:50 

本文实例讲述了Python multiprocess pool模块报错pickling error问题解决方法。分享给大家供大家参考,具体如下:

问题

之前在调用class内的函数用multiprocessing模块的pool函数进行多线程处理的时候报了以下下错误信息:

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

查了下官方文档发现python默认只能pickle以下的类型:

  • None, True, and False

  • integers, floating point numbers, complex numbers

  • strings, bytes, bytearrays

  • tuples, lists, sets, and dictionaries containing only picklable objects

  • functions defined at the top level of a module (using def, not lambda)

  • built-in functions defined at the top level of a module

  • classes that are defined at the top level of a module

  • instances of such classes whose dict or the result of calling getstate() is picklable (see section -

  • Pickling Class Instances for details).

函数只能pickle在顶层定义的函数,很明显的class内的函数无法被pickle因此会报错。


import multiprocessing
def work():  # top-level 函数
 print "work!"
class Foo():
 def work(self): # 非top-level函数
   print "work"
pool1 = multiprocessing.Pool(processes=4)
foo = Foo()
pool1.apply_async(foo.work)
pool1.close()
pool1.join()
# 此时报错
pool2 = multiprocessing.Pool(processes=4)
pool2.apply_async(work)
pool2.close()
pool2.join()
# 此时工作正常

解决方案

调用pathos包下的multiprocessing模块代替原生的multiprocessing。pathos中multiprocessing是用dill包改写过的,dill包可以将几乎所有python的类型都serialize,因此都可以被pickle。或者也可以自己用dill写一个(有点重复造轮子之嫌啊)

参考

1. https://stackoverflow.com/questions/8804830/python-multiprocessing-picklingerror-cant-pickle-type-function
2. https://docs.python.org/3/library/pickle.html#what-can-be-pickled-and-unpickled
3. https://github.com/uqfoundation/pathos

希望本文所述对大家Python程序设计有所帮助。

来源:https://www.cnblogs.com/arkenstone/p/7901129.html

标签:Python,multiprocess,pool
0
投稿

猜你喜欢

  • Python 3中print函数的使用方法总结

    2021-12-21 00:37:18
  • 对python中执行DOS命令的3种方法总结

    2021-10-11 12:22:53
  • Python中turtle绘图模块的详细讲解

    2022-12-30 02:38:27
  • python制作定时发送信息脚本的实现思路

    2023-01-17 15:24:11
  • 如何利用PyQt5美化你的GUI界面

    2023-06-18 19:58:55
  • 深入理解Python中的内置常量

    2023-01-21 02:57:47
  • javascript读取xml

    2024-04-23 09:30:13
  • SQL数据库十四种案例介绍

    2024-01-14 14:50:42
  • 在VScode里面添加Python解释器的详细步骤

    2021-12-04 16:03:11
  • Pytorch深度学习addmm()和addmm_()函数用法解析

    2021-01-02 04:04:25
  • Python运维开发之psutil库的使用详解

    2023-10-24 14:22:55
  • 解决SqlServer 各版本 sa帐户不能登录问题

    2024-01-19 11:36:02
  • sql分类汇总及Select的自增长脚本

    2024-01-22 20:43:34
  • Python读取txt文件数据的方法(用于接口自动化参数化数据)

    2023-12-28 03:21:52
  • php下常用表单验证的正则表达式

    2024-05-03 15:35:08
  • tensorflow -gpu安装方法(不用自己装cuda,cdnn)

    2021-01-26 09:06:46
  • javascript 数组去重复(在线去重工具)

    2024-04-16 09:14:51
  • ASP长文章分页代码实例

    2007-10-02 17:04:00
  • Python中使用haystack实现django全文检索搜索引擎功能

    2023-06-30 07:21:03
  • python typing模块--类型提示支持

    2023-11-11 16:47:27
  • asp之家 网络编程 m.aspxhome.com