def go (self) : pool = multiprocessing.Pool(processes= 4 ) #result = pool.apply_async(self.f, [10]) #print result.get(timeout=1) print pool.map(self.f, range( 10 ))

注意:如果出现
PicklingError: Can't pickle <type 'instancemethod'>: attribute lookup __builtin__.instancemethod failed

数据序列化
https://zhidao.baidu.com/question/525917268.html
https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/00138683221577998e407bb309542d9b6a68d9276bc3dbe000
应该是说一个数据结构,比如二叉树之类,序列化以后会变成一个char数组或者一个string字符串这样,方便你存到文件里面或者通过网络传输。然后要恢复的时候就是“反序列化”,把文件里读出来/从网络收到的char数组或者string恢复成一棵二叉树或者其他什么东西。主要就是方便保存

可以被序列化的类型有:
https://zhidao.baidu.com/question/619353578954760372.html
* None,True 和 False;
* 整数,浮点数,复数;
* 字符串,字节流,字节数组;
* 包含可pickle对象的tuples,lists,sets和dictionaries;
* 定义在module顶层的函数:
* 定义在module顶层的内置函数;
* 定义在module顶层的类;
* 拥有 dict ()或 setstate ()的自定义类型;

https://stackoverflow.com/questions/8804830/python-multiprocessing-pickling-error

The problem is that the pool methods all use a queue.Queue to pass tasks to the worker processes. Everything that goes through the queue.Queue must be pickable, and foo.work is not picklable since it is not defined at the top level of the module.
It can be fixed by defining a function at the top level

大意是类中的方法不能被序列化,而进程中的参数或者函数必须被序列化,所以报错

import multiprocessing
def func(x):
    return x*x
class someClass(object):
    def __init__(self,func):
        self.f = func
    def go(self):
        pool = multiprocessing.Pool(processes=4)
        #result = pool.apply_async(self.f, [10])
        #print result.get(timeout=1)
        print pool.map(self.f, range(10))
a=someClass(func)
a.go()

defining a function at the top level
将进程需要调用的函数变成定义在module顶层的函数

解决过程中又出现的问题:
1. con = multiprocessing.Process(target=self.connect, args=(k, metrics, request, return_dict, ))
同样是PicklingError: Can’t pickle错误
原因是:

type(metrics)
<type 'dict'>

虽然metrics的类型是dict但是里面的具体内容是
'vmware_vm_net_transmitted_average': <prometheus_client.core.GaugeMetricFamily object at 0x7161650>
也会报PicklingError: Can’t pickle

可能是里里面的 <prometheus_client.core.GaugeMetricFamily object at 0x7161650> 不能被序列化

http://bbs.chinaunix.net/thread-4111379-1-1.htmlimport multiprocessingclass someClass(object): def __init__(self): pass def f(self, x): return x*x def go(self): ... 今天写了一个小脚本,因为涉及到cpu运算的事件,所以用了多进程. 因为大量复用了以前的类,就遇到了奇怪的问题。 我这里就不暴露我的业务代码,临时写了个小demo供大家测试下。 文章写的不是很严谨,欢迎来喷,另外该文后续有更新的,... 这是为 的用作示例的代码。 这些示例均已在OS X上运行的 Python 3.6.4下进行了测试。它们应可在其他操作系统和 Python 3.5+上运行,但我并没有在所有地方进行过测试。 获取 API密钥 使用pip install -r requirements.txt安装依赖项 运行示例IMGUR_CLIENT_ID=your_client_id threading_imgur.py 对于rq_imgur.py示例,您还将需要运行redis服务器。
pickle . Pic k lin g Error : Can’t pickle <function at 0x0000016ACED65160>: attribute lookup on main failed multiprocessing 模块不但支持多进程, 其中managers子模块还支持把多进程分布到多台机器上。 task_master.py 出现一下报错: pickle . Pic k lin g Error : Can’t pickle <function at 0x0000016ACED651
当您尝试将使用 Flask 框架编写的 Python 应用程序序列化(即将其转换为 pickle 格式)时,可能会遇到 Flask Attribute Error :“无法 pic kel 本地对象'run.<locals>. server_forever'”。这是因为 Flask 的本地对象无法被序列化。 更具体地说,这个错误是在使用 Flask 内置发行程序时出现的。发行程序使用 multiprocessing 库将应用程序作为独立进程运行,但 multiprocessing 库依赖于 pickle 库来序列化和传递进程之间的数据。由于 Flask 中的本地对象无法被 pickle 序列化,因此会引发 Attribute Error 。 解决此错误的方法是使用不同的服务器,例如 Gunicorn 或 uWSGI。这些服务器不依赖于 multiprocessing 库或 pickle 序列化,并且可以与 Flask 应用程序兼容。 总之,当您遇到 Flask Attribute Error :“无法 pic kel 本地对象'run.<locals>. server_forever'”时,您可以使用不同的服务器来解决此问题。这么做将避免对 Flask 的本地对象进行序列化,并使您能够顺利地运行您的 Python 应用程序。
setsockopt 函数在不同level下设置后,可否同时生效? [code=python] self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) self.socket.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1) # 比如,先后设置上面两句 能否同时 生效? [/code] python多进程获取返回值 南国那片枫叶: [code=python] import multiprocessing from multiprocessing import Manager, Process, Pool def worker(procnum, return_dict): """worker function""" print(str(procnum) + ' represent!') return_dict[procnum] = str(procnum) if __name__ == '__main__': manager = Manager() return_dict = manager.dict() jobs = [] for i in range(5): p = multiprocessing.Process(target=worker, args=(i, return_dict)) jobs.append(p) p.start() for proc in jobs: proc.join() # 最后的结果是多个进程返回值的集合 print(return_dict) [/code] centos7 scst安装 Leon-zy: centos7 开启服务你用service start scst?这明显是6的命令把 python multiprocessing------PicklingError: Can't pickle qq_42882155: 不能被序列化该如何解决呢? python多进程获取返回值 南瓜派三蔬: 都跑不通啊