2010-04-30 9 views
2

내 문제는 물론 GIL입니다. 데이터를 분석하는 동안 그 사이에 몇 개의 그림을 표시하는 것이 좋을 것입니다. (그래서 결과를 기다리는 것은 지루하지 않습니다.)Python : GIL없이 일부 데이터 (matplotlib) 플롯

GIL은 이것을 방지합니다. 처음에는 그런 좋은 생각).

필자는 플롯 만 표시 할 수 있으며 사용자가 닫을 때까지 기다린 후 계산을 시작합니다. 분명히 시간 낭비.

이미 서브 프로세스와 멀티 프로세싱 모듈을 사용해 보았지만 작동시키지 못했습니다.

이것에 대한 의견이 있으십니까? 감사합니다.

편집 : 그래, GIL이 아닌 show()입니다.

답변

5

이것은 matplotlib 또는 GIL에서 문제가되지 않습니다.

In matplotlib 응용 프로그램에서 다른 작업을 계속하는 동안 원하는만큼 숫자를 열고 화면에 표시 할 수 있습니다.

대화식 모드에서 matplotlib을 사용해야합니다. 이것은 아마도 당신의 문제입니다.

from matplotlib import interactive 
interactive(True) 

이 당신의 수입

3

GIL과 아무런 관련이 없습니다. 그래프를 수시로 업데이트하도록 분석 코드를 수정하십시오 (예 : N 회 반복마다).

그래프를 보면 그래프가 분석 코드를 너무 느리게하는 경우 그래프 처리 코드를 멀티 프로세싱을 사용하는 서브 프로세스에 배치하십시오.

+0

내가 무슨 뜻인지 이해하지 못했다고 생각합니다. 플롯이 표시되면 인터프리터는 창을 닫을 때까지 중지됩니다. show()의 전후에 print 문을 쓰면 ... 만약 내가 틀렸다면 plot 명령을 올바르게 사용하는 방법을 설명하기 위해 pseudo codde를 포함시킬 수 있습니까?) 메서드 호출? – BandGap

+1

[show()] (http://matplotlib.sourceforge.net/faq/howto_faq.html#use-show)는 스크립트에서 한 번만 사용하도록되어 있습니다. 예를 들어, 그래프를 이미지로 렌더링하고 외부 프로그램 (예 : eog)을 사용하여 표시하거나 픽스맵에 GUI 렌더링을 사용하는 등의 경우 ... –

3

내장 된 쇼 코드를 사용하는 대신 그래프를 적절한 Windowing 시스템에 넣어야한다고 생각합니다.

다른 스레드에서 .show()를 붙이면 충분할까요?

GIL은 부적절합니다. show() 호출을 차단 했으므로 먼저 처리해야합니다.

2

쇼에 대한 필요성을 우회 할 수있는 무승부() 메소드 것 같다()의 맨 위에 있어야합니다.

스크립트에서 .show()가 남은 유일한 이유는 스크립트가 끝날 때 이미지가 사라지지 않도록 차단 부분을 허용하는 것입니다.

+0

+1 : 나는 누군가가 이것을 언급 할 때가 궁금 해서요 ... :) – EOL