Skip to content

Error when pickling objects configured with Gin #196

@erenz14

Description

@erenz14

apologies in advance as I had to type this on my phone

I'm getting the following error when trying to pickle an instance of a class that is configured with gin:

Error:

TypeError: cannot pickle '_thread.lock' object

Code that triggers the error:

import io
import cloudpickle as cp
import gin

@gin.configurable
class Car:
     def __init__(self.horn_noise: str):
          self.horn_noise = horn_noise

     def honk(self):
          print

gin.parse_config_files_and_bindings(config_files=[], bindings=['Car.horn_noise = "beep beep!"'])

car = Car()
car_pkl_bytes = cp.dumps(car)
loaded_car = cp.load(io.BytesIO(car_pkl_bytes)

A workaround is referenced in this issue, but it involves installing dask (or pulling the SerializableLock class into my project) and for some reason even though this workaround allows me to pickle and unpickle a gin configured class, I have to run gin.parse_config_files_and_bindings again after unpickling so that the instance works properly: #8

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions