2014-11-26 1 views
9

Python/Django (실제로는 순수한 Python에서는 괜찮습니다)에서 하나의 문제를 해결할 수 없기 때문에이 질문을하고 있습니다. 이는 RuntimeError: tcl_asyncdelete async handler deleted by the wrong thread으로 연결됩니다. 이것은 어떻게 든 장고에 matplotlib 플롯을 렌더링하는 방법과 관련이 있습니다. 내가하는 방식은 다음과 같습니다.Python/Django에서 이미지를 정리하는 방법은 무엇입니까?

... 
import matplotlib.pyplot as plt 
... 
fig = plt.figure() 
... 
plt.close() 

코드를 극도로 최소화했습니다. 하지만 그 코드는 단지 한 줄의 코드라도 가지고 있습니다 :

fig = plt.figure() 

이 RuntimeError가 발생하는 것을 볼 수 있습니다. 나는 내가 Python/Django에서 플롯을 닫고/청소하고/파괴하는 정확한 방법을 안다면 문제를 해결할 수 있었으면 좋겠다.

+0

당신이 역 추적을 게시 할 수 있습니까? – knbk

+0

Pyramid 1.3.4/Python 2.7에서 같은 문제가 발생했습니다. 예외가 없습니다. 예외 RuntimeError : RuntimeError ('메인 스레드가 메인 루프에 없습니다',) > 무시되었습니다. Tcl_AsyncDelete : 비동기 처리기가 잘못된 스레드에 의해 삭제되었습니다. –

답변

16

기본적으로 matplotlib는 툴킷 (예 : 파일 또는 문자열)을 사용하지 않고 이미지를 렌더링 할 때 TK gui 툴킷을 사용하지만 matplotlib은 여전히 ​​표시되지 않는 창을 인스턴스화하여 모든 종류의 문제 . 이를 방지하려면 Agg 백엔드를 사용해야합니다. 그것은과 같이 활성화 할 수 있습니다 -

import matplotlib 
matplotlib.use('Agg') 
from matplotlib import pyplot 

자세한 내용은 문서를하기 matplotlib를 참조하십시오 - http://matplotlib.org/faq/howto_faq.html#matplotlib-in-a-web-application-server

+0

아니요, 이미지에 렌더링하지 않습니다. base64로 인코딩하고 브라우저에서 렌더링합니다. – Jacobian

+0

TK 툴킷을 사용하지 않는다는 것을 의미하므로 제 대답을 명확히 할 것입니다. –

관련 문제