파이썬에서 lambda함수는 pickle이 안된다. pickle이 뭔지는 나도 모른다.(!)
아무튼 lambda를 포함한 클래스를 multiprocessing을 하려고 시도했더니 pickle이 안된다면서 오류를 내뿜길래 다음과 같이 조치하였다.
원래: lambda y: SomeExpressionOfY(y)
참고로 이건 f=lambda y: SomeExpressionOfY(y) 처럼 이름을 붙여줘도 오류가 난다. 다음과 같이 명시적으로 정의해야 한다.
조치후:
def f(y):
return lambda y: SomeExpressionOfY(y)
왜 이렇게 하였는가?
사실 저 lambda 자리에 들어가야 할 것이 eval(“lambda y: …”)인 구문이기 때문이다. 물론 eval을 쓸 경우 해킹에 취약해진다는 문제가 발생하지만, 지금 구현중인 코드에서는 eval을 쓰지 않으면 매스매티카 급의 수식 파서를 만들어야 하는 문제가 생겨서 써야만 했다. 어차피 나 혼자 쓰거나, 배포하더라도 그걸 해킹해서 뭐하게 수준의 프로그램이라 별 문제는 없을 것으로 보인다.
댓글 남기기