我有一個實例化對象object.This內部調用不是運行多處理模塊的方法的sconstruct腳本。下面所示使用SCons AttributeError的:「builtin_function_or_method」對象有沒有屬性「調度」
例如該對象之前調用函數unpickles一個文件,並通過輸入多處理模塊。
def run_scons(self,inpfile,outfile):
# Unpickle input parameter
fid=open(inpfile,'rb')
input_data=pkls.load(fid)
my_results=[]
#run solver in loop
for my_data in input_data:
work_ers=len(my_data)
pool = Pool(processes=work_ers)
a_result=pool.map_async(my_solver, my_data)
pool.close()
pool.join()
my_results.append(a_result.get())
fid.close()
fid_out=open(outfile,'wb+')
pkls.dump(rot_full_results,fid_out)
當通過scons執行相同的函數時,出現以下錯誤。
pool = Pool(processes=work_ers)
File "C:\Python27\lib\multiprocessing\__init__.py", line 232, in Pool
return Pool(processes, initializer, initargs, maxtasksperchild)
File "C:\Python27\lib\multiprocessing\pool.py", line 138, in __init__
self._setup_queues()
File "C:\Python27\lib\multiprocessing\pool.py", line 232, in _setup_queues
from .queues import SimpleQueue
File "C:\Python27\lib\multiprocessing\queues.py", line 48, in <module>
from multiprocessing.synchronize import Lock, BoundedSemaphore, Semaphore, Condition
File "C:\Python27\lib\multiprocessing\synchronize.py", line 48, in <module>
from multiprocessing.forking import assert_spawning, Popen
File "C:\Python27\lib\multiprocessing\forking.py", line 60, in <module>
class ForkingPickler(Pickler):
File "C:\Python27\lib\multiprocessing\forking.py", line 61, in ForkingPickler
dispatch = Pickler.dispatch.copy()
AttributeError: 'builtin_function_or_method' object has no attribute 'dispatch'
scons: building terminated because of errors.
閱讀有關此錯誤後,我發現SCons的大約有它重命名泡菜模塊cPickle的,而多處理器模塊正在尋找的cPickle一個黑客,一切都下降。有沒有辦法解決?
我找到了更新。對於scipy構建他們有同樣的問題。 (http://comments.gmane.org/gmane.comp.programming.tools.scons.user/21764)我不知道如何設置在sconstruct文件這個變量「SCONS_HORRIBLE_REGRESSION_TEST_HACK」。 – Sri