今天在学习到廖老师Python教程的分布式进程时,遇到了一个错误:_pickle.PicklingError: Can't pickle <function <lambda> at 0x000001710FDC2EA0>: attribute lookup <lambda> on __main__ failed(pickle模块不能序列化lambda函数)

代码如下:

 #!/usr/bin/env python
# _*_ coding:utf-8 _*_ import random, queue
from multiprocessing.managers import BaseManager # 发送任务的队列
task_queue = queue.Queue()
# 接收结果的队列
result_queue = queue.Queue()
# 从BaseManager继承的QueueManager class QueueManager(BaseManager):
pass # 吧两个Queue都注册到网络上,callable参数关联了Queue对象
QueueManager.register('get_task_queue', callable=lambda: task_queue)
QueueManager.register('get_result_queue', callable=lambda: result_queue) # 绑定端口5000,设置验证码abc
manager = QueueManager(address=('', 5000), authkey=b'abc') # 启动queue
manager.start() # 获得通过网络访问的Queue对象
task = manager.get_task_queue()
result = manager.get_result_queue() # 放几个任务
for i in range(10):
n = random.randint(0, 1000)
print('添加任务 %d' % n)
task.put(n) # 从result队列读取结果
print('尝试获取结果')
for i in range(10):
r = result.get(timeout=10)
print('结果是:%s' % r) # 关闭
manager.shutdown()
print('master exit')

在教程中我记得有关pickle的事儿(有印象,看来思想还在线上,哈哈),翻了一下,看到:

原来是系统问题造成的,那么,如何解决呢?在教程中我也看到,遇到这样的情况,需要我们自己定义函数,实现序列化。

所以对代码稍加修改,定义两个函数return_task_queue和return_result_queue实现序列化:

 #!/usr/bin/env python
# _*_ coding:utf-8 _*_ import random, queue
from multiprocessing.managers import BaseManager # 发送任务的队列
task_queue = queue.Queue()
# 接收结果的队列
result_queue = queue.Queue() def return_task_queue():
global task_queue
return task_queue def return_result_queue():
global result_queue
return result_queue # 从BaseManager继承的QueueManager class QueueManager(BaseManager):
pass if __name__ == '__main__':
# 吧两个Queue都注册到网络上,callable参数关联了Queue对象
QueueManager.register('get_task_queue', callable=return_task_queue)
QueueManager.register('get_result_queue', callable=return_result_queue) # 绑定端口5000,设置验证码abc
manager = QueueManager(address=('127.0.0.1', 5000), authkey=b'abc') # 启动queue
manager.start() # 获得通过网络访问的Queue对象
task = manager.get_task_queue()
result = manager.get_result_queue() # 放几个任务
for i in range(10):
n = random.randint(0, 1000)
print('添加任务 %d' % n)
task.put(n) # 从result队列读取结果
print('尝试获取结果')
for i in range(10):
r = result.get(timeout=10)
print('结果是:%s' % r) # 关闭
manager.shutdown()
print('master exit')

运行结果:

欢迎各位来和我一起分享技术,交流学习心得

Python分布式进程报错:pickle模块不能序列化lambda函数的更多相关文章

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

    运行错误:_pickle.PicklingError: Can't pickle <function <lambda> at 0x000002BAAEF12F28>: attr ...

  2. python数据持久存储:pickle模块的基本使用

    经常遇到在Python程序运行中得到了一些字符串.列表.字典等数据,想要长久的保存下来,方便以后使用,而不是简单的放入内存中关机断电就丢失数据. 这个时候Pickle模块就派上用场了,它可以将对象转换 ...

  3. python数据持久存储:pickle模块的使用

    python的pickle模块实现了基本的数据序列和反序列化.通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储:通过pickle模块的反序列化操作,我们能够从文件 ...

  4. GoldenGate 复制进程报错"OGG-01296 Error mapping",丢弃文件报错“Mapping problem with delete record (target format)”,且实际条目存在

    故障描述: (1).复制进程 Abended,通过view report语句查看可发现类似如下的报错: 2017-10-23 15:01:43 ERROR OGG-01296 Error mappin ...

  5. 【python】python读取文件报错UnicodeDecodeError: 'gbk' codec can't decode byte 0xac in position 2: illegal multibyte sequence

    python读取文件报错UnicodeDecodeError: 'gbk' codec can't decode byte 0xac in position 2: illegal multibyte ...

  6. 【python】python安装tensorflow报错:python No matching distribution found for tensorflow==1.12.0

    python安装tensorflow报错:python No matching distribution found for tensorflow==1.12.0 python版本是3.7.2 要安装 ...

  7. [转]python数据持久存储:pickle模块的基本使用

    python的pickle模块实现了基本的数据序列和反序列化.通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储:通过pickle模块的反序列化操作,我们能够从文件 ...

  8. mac下python环境pip报错[SSL: TLSV1_ALERT_PROTOCOL_VERSION] tlsv1 alert protocol version (_ssl.c:590) 的解决方法

    1.mac下python环境pip报错: issuserdeMacBook-Pro:~ issuser$ pip install pyinstallerCollecting pyinstaller  ...

  9. Django中修改DATABASES后,执行python manage.py ****报错!UnicodeEncodeError

    Django中修改DATABASES后,执行python manage.py ****报错!UnicodeEncodeError: 'latin-1' codec can't encode chara ...

随机推荐

  1. HessianSharp如何部署到IIS7上?

    第一:添加映射 第二:选择经典

  2. golang 自定义接口 和 实现接口

    /* 定义: type 接口名 interface{ 方法名(可选:参数列表) 可选:返回值列表 || (可选:返回值列表) } 例:type Writer interface { Write(p [ ...

  3. qt creator源码全方面分析(2-5)

    目录 Creating Wizards in Code 介绍 相关类 IWizardFactory的设置器和获取器 Creating Wizards in Code 介绍 如果基于模板的自定义向导提供 ...

  4. 准备 Python3 和 Python 虚拟环境

    1.安装依赖包 yum -y install wget gcc epel-release git 2.安装 Python3.6 yum -y install python36 python36-dev ...

  5. monkey命令行测试

    一. 什么是Monkey monkey是google提供的一个用于稳定性与压力测试的命令行工具.monkey程序由android系统自带,位于/sdcard/system/framework/monk ...

  6. Linux 报错:syntax error "C" 解决办法(此处选择bash系统)

    出现此问题的原因,是由系统的兼容性引起的,linux下默认了指向dash而非bash. linux下Dash改Bash: 1.先查看是使用哪个shell ls -al /bin/sh 2.#如果是Da ...

  7. 面型对象和UML类图

    面向对象 why? 1.程序执行:顺序,判断,循环,----结构化 2.面向对象----数据结构化 3.面向计算机,结构化的才是最简单的 4.变成应该 简单&抽象 一个基本的类 class P ...

  8. Flink中逻辑计划和物理计划的概念划分和对应关系

    逻辑计划 logicGraph或者jobGraph,其端点为operator,edge为数据流向. operator往往代表一个函数. 同一个分区内的具有连续上下游关系的函数组成operator-ch ...

  9. 【python基础语法】常用内置函数、关键字、方法和之间的区别(小结)

    ''' 关键字: False:bool数据类型 True:bool数据类型 None:表示数据的内容为空 and:逻辑运算符:与 or:逻辑运算符:或 not:逻辑运算符:非 in:身份运算符,判断变 ...

  10. go 算法与数据结构

    数据结构 稀疏数组 package main import "fmt" /* 稀疏数组 案例:五子棋存盘与复盘 节省存储空间 */ type ValNode struct { ro ...