运行错误:_pickle.PicklingError: Can't pickle <function <lambda> at 0x000002BAAEF12F28>: attribute lookup <lambda> on __main__ failed

代码如下:

 1 #!/usr/bin/env python3
 2 # -*- coding: utf-8 -*-
 3
 4 import random, time, queue
 5 from multiprocessing.managers import BaseManager
 6
 7 # 发送任务的队列:
 8 task_queue = queue.Queue()
 9 # 接收结果的队列:
10 result_queue = queue.Queue()
11
12 # 从BaseManager继承的QueueManager:
13 class QueueManager(BaseManager):
14     pass
15
16 # 把两个Queue都注册到网络上, callable参数关联了Queue对象:
17 QueueManager.register('get_task_queue', callable=lambda: task_queue)
18 QueueManager.register('get_result_queue', callable=lambda: result_queue)
19
20 # 绑定端口5000, 设置验证码'abc':
21 manager = QueueManager(address=('', 5000), authkey=b'abc')
22
23 # 启动Queue:
24 manager.start()
25
26 # 获得通过网络访问的Queue对象:
27 task = manager.get_task_queue()
28 result = manager.get_result_queue()
29
30 # 放几个任务进去:
31 for i in range(10):
32     n = random.randint(0, 10000)
33     print('Put task %d...' % n)
34     task.put(n)
35
36 # 从result队列读取结果:
37 print('Try get results...')
38 for i in range(10):
39     r = result.get(timeout=10)
40     print('Result: %s' % r)
41
42 # 关闭:
43 manager.shutdown()
44 print('master exit.')

报错信息:

 1 Traceback (most recent call last):
 2   File "task_master.py", line 22, in <module>
 3     manager.start()
 4   File "E:\Anaconda\Anaconda3\lib\multiprocessing\managers.py", line 513, in start
 5     self._process.start()
 6   File "E:\Anaconda\Anaconda3\lib\multiprocessing\process.py", line 105, in start
 7     self._popen = self._Popen(self)
 8   File "E:\Anaconda\Anaconda3\lib\multiprocessing\context.py", line 322, in _Popen
 9     return Popen(process_obj)
10   File "E:\Anaconda\Anaconda3\lib\multiprocessing\popen_spawn_win32.py", line 65, in __init__
11     reduction.dump(process_obj, to_child)
12   File "E:\Anaconda\Anaconda3\lib\multiprocessing\reduction.py", line 60, in dump
13     ForkingPickler(file, protocol).dump(obj)
14 _pickle.PicklingError: Can't pickle <function <lambda> at 0x000002BAAEF12F28>: attribute lookup <lambda> on __main__ failed

错误原因:pickle模块不能序列化lambda,需要自定义函数

修改代码如下:

 1 #!/usr/bin/env python3
 2 # -*- coding: utf-8 -*-
 3
 4 import random, time, queue
 5 from multiprocessing.managers import BaseManager
 6
 7 # 发送任务的队列:
 8 task_queue = queue.Queue()
 9 # 接收结果的队列:
10 result_queue = queue.Queue()
11
12 # 自定义函数re_task_queue
13 def re_task_queue():
14     global task_queue
15     return task_queue
16
17 # 自定义函数re_result_queue
18 def re_result_queue():
19     global result_queue
20     return result_queue
21
22 # 从BaseManager继承的QueueManager:
23 class QueueManager(BaseManager):
24     pass
25
26 if __name__ == '__main__':
27
28     # 把两个Queue都注册到网络上, callable参数关联了Queue对象:
29     QueueManager.register('get_task_queue', callable=re_task_queue)
30     QueueManager.register('get_result_queue', callable=re_result_queue)
31
32     # 绑定端口5000, 设置验证码'abc':
33     manager = QueueManager(address=('127.0.0.1', 5000), authkey=b'abc')
34
35     # 启动Queue:
36     manager.start()
37
38     # 获得通过网络访问的Queue对象:
39     task = manager.get_task_queue()
40     result = manager.get_result_queue()
41
42     # 放几个任务进去:
43     for i in range(10):
44         n = random.randint(0, 10000)
45         print('Put task %d...' % n)
46         task.put(n)
47
48     # 从result队列读取结果:
49     print('Try get results...')
50     for i in range(10):
51         r = result.get(timeout=10)
52         print('Result: %s' % r)
53
54     # 关闭:
55     manager.shutdown()
56     print('master exit.')

运行结果:

C:\Users\Lucky丶M\python>python task_master.py
Put task 4962...
Put task 3460...
Put task 4774...
Put task 4301...
Put task 9120...
Put task 7183...
Put task 4915...
Put task 3173...
Put task 9138...
Put task 5798...
Try get results...

转载于:https://www.cnblogs.com/ttkl/p/8692335.html

[python](windows)分布式进程问题:pickle模块不能序列化lambda函数相关推荐

  1. python程序设计实验报告实验程序流程序列化_Python使用pickle模块实现序列化功能示例...

    本文实例讲述了Python使用pickle模块实现序列化功能.分享给大家供大家参考,具体如下: Python内置的pickle模块能够将Python对象序列成字节流,也可以把字节流反序列成对象. im ...

  2. Python标准库中的pickle模块

     pickle  -  Python对象序列化. pickle模块实现了用于序列化和反序列化Python对象结构的二进制协议."pickle"是将Python对象层次结构转换为 ...

  3. Python存储生成的决策树——pickle模块

    假设通过训练样本生成的决策树为: {'no surfacing': {0: 'no', 1: {'flippers': {0: 'no', 1: 'yes'}}}} 利用pickle模块可以存储和加载 ...

  4. python混淆矩阵函数_Python sklearn.metrics模块混淆矩阵常用函数

    from sklearn import metrics 1.accuracy_score(y_true, y_pred, normalize=True, sample_weight=None) 参数分 ...

  5. python pickle模块

    持久性就是指保持对象,甚至在多次执行同一程序之间也保持对象.通过本文,您会对 Python对象的各种持久性机制(从关系数据库到 Python 的 pickle以及其它机制)有一个总体认识.另外,还会让 ...

  6. Python学习笔记:线程和进程(合),分布式进程

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  7. Python编程——pickle模块的使用详解(附实例)

    1.  模块的介绍 在介绍pickle模块之前,我们先了解一下python中的模块以及模块的分类,可以让我们对模块有更深入的了解. (1) 模块是什么: Python 模块(Module),是一个 P ...

  8. Python json pickle模块

    一.json,用于字符串和Python数据类型间进行转换(适用于所有语言) 1.Json模块提供了四个功能:dumps . dump.loads.load 二.pickle,用于python特有的类型 ...

  9. Python pickle模块和joblib模块浅析

    在Python中,如果希望透明地存储对象,而不丢失其身份和类型等信息,则需要某种形式的对象序列化,这是一个将任意复杂的对象转成对象的文本和二进制表示的过程.同样,必须能够将对象经过序列化后的形式恢复到 ...

最新文章

  1. 最火的前端开发框架Bootstrap使用教程学习!
  2. 手机python代码写好了怎么运行-想在手机上编写python代码?手机上玩转python的利器...
  3. Unity3D对手机屏幕触摸的控制脚本
  4. windows中 修改某种文件图标 的方法 (备忘)
  5. Apache Flink,流计算?不仅仅是流计算!
  6. 职称英语与计算机考试试题,2020年职称计算机考试模拟选择试题及答案.doc
  7. HW 静态路由实现PC间互通
  8. Zookeeper-Zookeeper可以干什么
  9. java 分卷 zip
  10. Python实现好友管理系统
  11. 5号字对应的数字字号_五号字体是多少磅的?
  12. 大数据Hadoop之——任务调度器Azkaban(Azkaban环境部署)
  13. springboot 解决 NoClassDefFoundError: redis/clients/jedis/util/SafeEncoder
  14. Python-Pillow给图片加文字
  15. java-net-php-python-jspm现代化社区去也管理系统计算机毕业设计程序
  16. 鼎新图书馆结束使用计算机时,新生导航•【学习篇】| 学霸从图书馆开始
  17. 模板四十天之一 KMP
  18. Git删除本地分支(批量删除)
  19. 喵哈哈村的打印机游戏(区间DP)
  20. Unity功能点---NavMesh的爬墙(OffMeshLink)和路障(NavMesh Obstacle)

热门文章

  1. linux命令查看cpu负载,怎么使用Linux命令查看CPU使用率
  2. vue保存内容到本地_Vue两个版本区别
  3. php 开发商城 注意,php开发微商城要注意什么
  4. Ubuntu 16.04安装XMind 8
  5. ansible-playbook jdk安装
  6. iOS 设置app语言中文,比如 copy中文,拍照按钮cancel 中文
  7. JAVA版连连看算法研究
  8. wps office oa控件 痕迹_WPS大更新,Office的付费功能免费用,我不会是最后一个知道的吧?...
  9. vector 结构体类型 使用 排序
  10. 黄金法则----比较法则