Dear developers,
It was found that when trying to save sscha.Relax.SSCHA object into file after the relaxation was ended, the pickle module throws the following error:
File ~/miniconda3/lib/python3.9/site-packages/sscha/Utilities.py:664, in save_binary(object, filename)
661 if not sscha.Parallel.am_i_the_master():
662 return
--> 664 pickle.dump(object, open(filename, "wb"))
TypeError: cannot pickle '_thread.lock' object
Searching for the methods for fixing this error I found that there is another python module for dumping objects into binary files named "dill"
With dill, the sscha.Relax.SSCHA object was successfully dumped into the file and then loaded from it.
The code example:
Saving relax object with dill
import dill
filename = 'relax_fix_volume.bin'
dill.dump(relax, open(filename, "wb"))
Loading the relax object with dill
filename = 'relax_fix_volume.bin'
relax_loaded= dill.load(open(filename, "rb"))
relax_loaded.minim.finalize()
relax_loaded.minim.plot_results()
I think, it will be better to use dill instead of pickle in the sscha.Utilities.save_binary wrapper in the future releases!
With best regards,
Daniil Poletaev
Dear developers,
It was found that when trying to save sscha.Relax.SSCHA object into file after the relaxation was ended, the pickle module throws the following error:
File ~/miniconda3/lib/python3.9/site-packages/sscha/Utilities.py:664, in save_binary(object, filename)
661 if not sscha.Parallel.am_i_the_master():
662 return
--> 664 pickle.dump(object, open(filename, "wb"))
TypeError: cannot pickle '_thread.lock' object
Searching for the methods for fixing this error I found that there is another python module for dumping objects into binary files named "dill"
With dill, the sscha.Relax.SSCHA object was successfully dumped into the file and then loaded from it.
The code example:
Saving relax object with dill
import dill
filename = 'relax_fix_volume.bin'
dill.dump(relax, open(filename, "wb"))
Loading the relax object with dill
filename = 'relax_fix_volume.bin'
relax_loaded= dill.load(open(filename, "rb"))
relax_loaded.minim.finalize()
relax_loaded.minim.plot_results()
I think, it will be better to use dill instead of pickle in the sscha.Utilities.save_binary wrapper in the future releases!
With best regards,
Daniil Poletaev