Closed minhhg closed 7 years ago
The best way to get help is to provide a minimal version of the code that still reproduces the error.
However, there are a few things you can do to try to solve it yourself (or provide more information here). If you change: multiprocessing.ProcessingPool(2)
to pools.ThreadPool(1)
does it work? If so, it's a pickling problem. If it's not a pickling problem, then you can replace the pathos
map
with a standard python map
and debug normally.
If the ThreadPool
works, then switch to pools.ProcessPool(1)
and add the line import dill; dill.detect.trace(True)
. This will spit out a bunch of trace information about what it being serialized, and you can see what the code is choking on. That might give you some indication of how to change your code to make it pass. From the trace, I can see a lot of tuple
objects being dumped, but it looks like the thing chokes on a cell
object... which is typically something that is passed to a helper function
that is being pickled (which I can also see in your trace). I'd need to see the full trace (as I suggested above) to tell you more. The typical reason for seeing the error you posted is that the function to be pickled has free variables that are referenced before assignment in enclosing scope. I'd need to see code to tell you more.
If you don't want to post code, or you solve it, please let me know by closing the ticket.
Hi Mike, Thanks for your reply. I change mp.ProcessingPool(2) to mp.ThreadPool(1). The problem still remains. If I change to standard multiprocessing map. I got the following import multiprocessing as mp pool = mp.Pool(2)
Traceback (most recent call last):
File "ev2.py", line 16, in
Here are the output if I add import dill; dill.detect.trace(True) mp.ProcessingPool(1)
=============================================
(banks) minh:eventlet$python ev2.py
/home/minh/miniconda/envs/banks/lib/python2.7/site-packages/sklearn/lda.py:4: DeprecationWarning: lda.LDA has been moved to discriminant_analysis.LinearDiscriminantAnalysis in 0.17 and will be removed in 0.19
"in 0.17 and will be removed in 0.19", DeprecationWarning)
/home/minh/miniconda/envs/banks/lib/python2.7/site-packages/sklearn/qda.py:4: DeprecationWarning: qda.QDA has been moved to discriminant_analysis.QuadraticDiscriminantAnalysis in 0.17 and will be removed in 0.19.
"in 0.17 and will be removed in 0.19.", DeprecationWarning)
('lb=', array([-1.4226973834243688, -3.6522752635392801, -0.5916678091519202,
-8.0080464313820876, -0.6512982708321773, -6.4639854203026035,
-3.5111542494302128, -2.0202811170209714, -0.673176631166826 ,
-5.6270790433573961]))
('ub=', array([ 1.7388523575186732, 4.4638919887702313, 0.7231495445190136,
9.7876123050225523, 0.7960312199059945, 7.9004266248142931,
4.2914107493035933, 2.4692324763589655, 0.8227714380927874,
6.8775410529923739]))
('scale=', array([ 0.3975895962511495, 0.6370308961231594, 0.2563998199756519,
0.9432830629351043, 0.2690101755267049, 0.8474789686215493,
0.6246024735275152, 0.473788644512505 , 0.2734911396425498,
0.7907155018193892]))
('#nproess=', 2, ' #points=', 10)
F2: <function mapstar at 0x7fb5fa506a28>
F2: <function mapstar at 0x7fb5fa506a28>
F1: <function
I try to provide a minimal version of the code that still reproduces the error but the problem shown up when it is called in a large, complex code.
Are you still using the same version of pathos
? Here are the most recent relevant versions:
>>> import pathos
>>> pathos.__version__
'0.2.1.dev0'
>>> import dill
>>> dill.__version__
'0.2.6.dev0'
>>> import multiprocess
>>> multiprocess.__version__
'0.70.5.dev0'
>>>
Your dill
looks like it's 0.2.2
, which is pretty old.
I have fixed the error, thanks to your help "The typical reason for seeing the error you posted is that the function to be pickled has free variables that are referenced before assignment in enclosing scope". Actually some variables are not set on certain paths of execution. The code works fine when run in sequential mode but I guess when using pathos one needs to define all these variables even they are not needed for correct execution, is that right?
That's correct.
Dear Folks, I have following errors using pathos import pathos.multiprocessing as mp pool = mp.ProcessingPool(2) res = pool.map(do_optimize1b, x0s) on ubuntu 16.04, 64bits, anaconda,
pathos 0.2a1.dev0
pp-1.5.7 pathos
processing-0.52 pathos
pyre-0.8.2.0 pathos
Is there any way to debug this as the code is a bit complicated to attach it here? Many thanks, Minh
Exception in thread Thread-1: Traceback (most recent call last): File "/home/minh/miniconda/envs/banks/lib/python2.7/threading.py", line 810, in bootstrap_inner self.run() File "/home/minh/miniconda/envs/banks/lib/python2.7/threading.py", line 763, in run self.target(*self.args, **self.__kwargs) File "/home/minh/miniconda/envs/banks/lib/python2.7/site-packages/processing-0.52_pathos-py2.7-linux-x8664.egg/processing/pool.py", line 207, in handleTasks put(task) File "/home/minh/miniconda/envs/banks/lib/python2.7/site-packages/dill-0.2.2-py2.7.egg/dill/dill.py", line 192, in dumps dump(obj, file, protocol, byref, fmode)#, strictio) File "/home/minh/miniconda/envs/banks/lib/python2.7/site-packages/dill-0.2.2-py2.7.egg/dill/dill.py", line 182, in dump pik.dump(obj) File "/home/minh/miniconda/envs/banks/lib/python2.7/pickle.py", line 224, in dump self.save(obj) File "/home/minh/miniconda/envs/banks/lib/python2.7/pickle.py", line 286, in save f(self, obj) # Call unbound method with explicit self File "/home/minh/miniconda/envs/banks/lib/python2.7/pickle.py", line 562, in save_tuple save(element) File "/home/minh/miniconda/envs/banks/lib/python2.7/pickle.py", line 286, in save f(self, obj) # Call unbound method with explicit self File "/home/minh/miniconda/envs/banks/lib/python2.7/pickle.py", line 548, in save_tuple save(element) File "/home/minh/miniconda/envs/banks/lib/python2.7/pickle.py", line 286, in save f(self, obj) # Call unbound method with explicit self File "/home/minh/miniconda/envs/banks/lib/python2.7/pickle.py", line 548, in save_tuple save(element) File "/home/minh/miniconda/envs/banks/lib/python2.7/pickle.py", line 286, in save f(self, obj) # Call unbound method with explicit self File "/home/minh/miniconda/envs/banks/lib/python2.7/site-packages/dill-0.2.2-py2.7.egg/dill/dill.py", line 626, in save_function obj.dict__), obj=obj) File "/home/minh/miniconda/envs/banks/lib/python2.7/pickle.py", line 401, in save_reduce save(args) File "/home/minh/miniconda/envs/banks/lib/python2.7/pickle.py", line 286, in save f(self, obj) # Call unbound method with explicit self File "/home/minh/miniconda/envs/banks/lib/python2.7/pickle.py", line 562, in save_tuple save(element) File "/home/minh/miniconda/envs/banks/lib/python2.7/pickle.py", line 286, in save f(self, obj) # Call unbound method with explicit self File "/home/minh/miniconda/envs/banks/lib/python2.7/pickle.py", line 548, in save_tuple save(element) File "/home/minh/miniconda/envs/banks/lib/python2.7/pickle.py", line 286, in save f(self, obj) # Call unbound method with explicit self File "/home/minh/miniconda/envs/banks/lib/python2.7/site-packages/dill-0.2.2-py2.7.egg/dill/dill.py", line 826, in save_cell pickler.save_reduce(_create_cell, (obj.cell_contents,), obj=obj) File "/home/minh/miniconda/envs/banks/lib/python2.7/pickle.py", line 401, in save_reduce save(args) File "/home/minh/miniconda/envs/banks/lib/python2.7/pickle.py", line 286, in save f(self, obj) # Call unbound method with explicit self File "/home/minh/miniconda/envs/banks/lib/python2.7/pickle.py", line 548, in save_tuple save(element) File "/home/minh/miniconda/envs/banks/lib/python2.7/pickle.py", line 286, in save f(self, obj) # Call unbound method with explicit self File "/home/minh/miniconda/envs/banks/lib/python2.7/site-packages/dill-0.2.2-py2.7.egg/dill/dill.py", line 626, in save_function obj.dict), obj=obj) File "/home/minh/miniconda/envs/banks/lib/python2.7/pickle.py", line 401, in save_reduce save(args) File "/home/minh/miniconda/envs/banks/lib/python2.7/pickle.py", line 286, in save f(self, obj) # Call unbound method with explicit self File "/home/minh/miniconda/envs/banks/lib/python2.7/pickle.py", line 562, in save_tuple save(element) File "/home/minh/miniconda/envs/banks/lib/python2.7/pickle.py", line 286, in save f(self, obj) # Call unbound method with explicit self File "/home/minh/miniconda/envs/banks/lib/python2.7/pickle.py", line 562, in save_tuple save(element) File "/home/minh/miniconda/envs/banks/lib/python2.7/pickle.py", line 286, in save f(self, obj) # Call unbound method with explicit self File "/home/minh/miniconda/envs/banks/lib/python2.7/site-packages/dill-0.2.2-py2.7.egg/dill/dill.py", line 826, in save_cell pickler.save_reduce(_create_cell, (obj.cell_contents,), obj=obj) ValueError: Cell is empty