2017-05-03 3 views
0

dill으로 직렬화에 성공하지만 pickle으로 실패하는 스 니펫은 다음과 같습니다. Tensor 개체가 기본적으로 피할 수없는 것은 놀라운 일입니다. 스레드 인식 Tensors의 근본적인 한계입니까 아니면 구현되지 않았습니까?왜 산 세척 텐솔 흐름 텐서가 실패합니까?

import dill 
import pickle 
import tensorflow as tf 

dill.dumps(tf.zeros((1,1))) 
print("Dill succeeded") 
pickle.dumps(tf.zeros((1,1))) 
print("Pickle succeeded") 

는 출력 :

$ python foo.py 
Dill succeeded 
Traceback (most recent call last): 
    File "foo.py", line 7, in <module> 
    pickle.dumps(tf.zeros((1,1))) 
TypeError: can't pickle _thread.lock objects 
+0

가능한 복제 http://stackoverflow.com/questions/39286665/how-to-avoid-pickling-errors-when-sharing-objects-between-threads – DyZ

답변

2

간단한 대답은 pickle 파이썬에서 대부분의 개체를 직렬화 할 수없는 즉, thread.lock 개체가 포함되어 있습니다. 이러한 객체 중 하나를 직렬화하려면 dill과 같은 고급 직렬화 라이브러리를 사용하십시오. 정확하게 pickle이 불가능한 이유에 대해서는 원래 GIL과 frame 오브젝트 구현으로 인해 일부 오브젝트를 직렬화 할 수 없기 때문에 모든 것을 언어로 직렬화 할 드라이브가 없다고 생각합니다. 모든 파이썬 객체의 직렬화로 인해 발생하는 보안 문제에 관해서는 항상 이야기가 있지만, 나는 그것이 빨간 청어라고 생각합니다. 전체 언어 직렬화가 병렬 컴퓨팅에서 작동하는 기능을 제한하지 않으므로 pickledill에서 더 많은 객체를 직렬화하는 방법을 배웁니다.

관련 문제