无法pickle<class'\uu main\uuuuuu.Client'>:它与\uuu main\uuuuuuu.Clien不是同一个对象

2024-04-25 05:23:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着在我的Jupyter笔记本上测量一些算法的性能。我有6个输入我需要测试,他们需要一段时间来运行,所以我想让它更快的代码并行化。我是Python新手,所以我不明白自己做错了什么。你知道吗

我在终端中启动了一个集群,如下所示:

ipcluster start -n 6

我创建了这样一个客户:

from ipyparallel import Client
c = Client()
v = c[:]

我试着这样并行:

v.map(lambda x: time_algorithm(optimized_hcs, x, h1), states)

其中states是对象列表,time_algorithm如下所示:

def time_algorithm(function, state, heuristic=None):
    timeitresult = 0
    if heuristic is None:
        timeitresult = %timeit -o -q function(state)
    else:
        timeitresult = %timeit -o -q function(state, heuristic)
    return sum(timeitresult.all_runs) / len(timeitresult.all_runs)

我得到的全部错误是:

---------------------------------------------------------------------------
PicklingError                             Traceback (most recent call last)
<ipython-input-64-ea578c0689fa> in <module>
----> 1 v.map(lambda x: time_algorithm(optimized_hcs, x, h1), states)

<d:\program files (x86)\microsoft visual studio\shared\python36_64\lib\site-packages\decorator.py:decorator-gen-142> in map(self, f, *sequences, **kwargs)

d:\program files (x86)\microsoft visual studio\shared\python36_64\lib\site-packages\ipyparallel\client\view.py in sync_results(f, self, *args, **kwargs)
     50     self._in_sync_results = True
     51     try:
---> 52         ret = f(self, *args, **kwargs)
     53     finally:
     54         self._in_sync_results = False

d:\program files (x86)\microsoft visual studio\shared\python36_64\lib\site-packages\ipyparallel\client\view.py in map(self, f, *sequences, **kwargs)
    621         assert len(sequences) > 0, "must have some sequences to map onto!"
    622         pf = ParallelFunction(self, f, block=block, **kwargs)
--> 623         return pf.map(*sequences)
    624 
    625     @sync_results

d:\program files (x86)\microsoft visual studio\shared\python36_64\lib\site-packages\ipyparallel\client\remotefunction.py in map(self, *sequences)
    297         and mismatched sequence lengths will be padded with None.
    298         """
--> 299         return self(*sequences, __ipp_mapping=True)
    300 
    301 __all__ = ['remote', 'parallel', 'RemoteFunction', 'ParallelFunction']

<d:\program files (x86)\microsoft visual studio\shared\python36_64\lib\site-packages\decorator.py:decorator-gen-132> in __call__(self, *sequences, **kwargs)

d:\program files (x86)\microsoft visual studio\shared\python36_64\lib\site-packages\ipyparallel\client\remotefunction.py in sync_view_results(f, self, *args, **kwargs)
     78     view = self.view
     79     if view._in_sync_results:
---> 80         return f(self, *args, **kwargs)
     81     view._in_sync_results = True
     82     try:

d:\program files (x86)\microsoft visual studio\shared\python36_64\lib\site-packages\ipyparallel\client\remotefunction.py in __call__(self, *sequences, **kwargs)
    261             if sum([len(arg) for arg in args]) == 0:
    262                 continue
--> 263             args = [PrePickled(arg) for arg in args]
    264 
    265             if _mapping:

d:\program files (x86)\microsoft visual studio\shared\python36_64\lib\site-packages\ipyparallel\client\remotefunction.py in <listcomp>(.0)
    261             if sum([len(arg) for arg in args]) == 0:
    262                 continue
--> 263             args = [PrePickled(arg) for arg in args]
    264 
    265             if _mapping:

d:\program files (x86)\microsoft visual studio\shared\python36_64\lib\site-packages\ipyparallel\serialize\serialize.py in __init__(self, obj)
     42     """
     43     def __init__(self, obj):
---> 44         self.buffers = serialize_object(obj)
     45 
     46 

d:\program files (x86)\microsoft visual studio\shared\python36_64\lib\site-packages\ipyparallel\serialize\serialize.py in serialize_object(obj, buffer_threshold, item_threshold)
    123         buffers.extend(_extract_buffers(cobj, buffer_threshold))
    124 
--> 125     buffers.insert(0, pickle.dumps(cobj, PICKLE_PROTOCOL))
    126     return buffers
    127 

PicklingError: Can't pickle <class '__main__.Client'>: it's not the same object as __main__.Client

Tags: inpyselflibpackagessiteargsfiles