
# set this to true to activate demo monkeypatch
demo = True

import multiprocessing
import dill
import dill._dill as di
import types as ty

def a():
  def b():
    print("hi")
  return b

def xr(pickler, obj, *args):
  print(f"override? {obj}")
  if isinstance(obj, ty.FunctionType) and obj.__name__ != "loads":
      print("Special behaviour")
      return (dill.loads, (dill.dumps(obj), ))
  else:
      print("Default behaviour")
      return NotImplemented


if __name__ == "__main__":

  pk = multiprocessing.reduction.ForkingPickler

  if demo:
    pk.reducer_override = xr

  with multiprocessing.Pool() as pool:
    pool.apply(a())    
