:이 중요한 경우에, 나는 python27
및 ipython27
관련 논의를 실행, OS X 10.8.2 (산 사자)에 실행 해요 다음과 같이 디스플레이를 분리하십시오 :
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab
import numpy as np
import os
def detach_display():
mu, sigma = 0, 0.5
x = np.linspace(-3, 3, 100)
plt.plot(x, mlab.normpdf(x, mu, sigma))
plt.show()
if os.fork():
# Parent
pass
else:
# Child
detach_display()
주 프로세스가 종료되지만 플롯이 유지됩니다.
시도 # 2. 이것은 Linux에서도 작동합니다.
당신은 그것을 시도 줄 수 있습니다는
os._exit(0)
없이 주요 공정 블록을 OS X의
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab
import numpy as np
import os
import multiprocessing as mp
def detach_display():
mu, sigma = 0, 0.5
x = np.linspace(-3, 3, 100)
plt.plot(x, mlab.normpdf(x, mu, sigma))
plt.show()
proc = mp.Process(target=detach_display)
proc.start()
os._exit(0)
에
하지만합니다. Ctrl-C를 누르면 주 프로세스가 종료되지만 플롯은 그대로 유지됩니다.
os._exit(0)
을 사용하면 주 프로세스가 종료되지만 플롯이 유지됩니다.
한숨. 시도 # 3. 다른 스크립트에서하기 matplotlib에 전화를 걸 경우에, 당신은 다음과 같은 하위 프로세스를 사용할 수 있습니다
show.py :
import matplotlib.pyplot as plt
import numpy as np
import sys
filename = sys.argv[1]
data = np.load(filename)
plt.plot(data['x'], data['y'])
plt.show()
test.py
import subprocess
import numpy as np
import matplotlib.mlab as mlab
mu, sigma = 0, 0.5
x = np.linspace(-3, 3, 100000)
y = mlab.normpdf(x, mu, sigma)
filename = '/tmp/data.npz'
np.savez(filename, x=x, y=y)
proc = subprocess.Popen(['python', '/path/to/show.py', filename])
플롯을 표시해야 test.py
을 실행하고 플롯이 표시된 상태에서 터미널로 제어를 되돌립니다.
이렇게하면 다음과 같은 메시지가 나타납니다. '프로세스가 분기되고 사용자는이 CoreFoundation 기능을 안전하게 사용할 수 없습니다. 반드시 exec()해야합니다. 디버깅하려면 __THE_PROCESS_HAS_FORKED_AND_YOU_CANNOT_USE_THIS_COREFOUNDATION_FUNCTIONALITY ___ YOU_MUST_EXEC __()을 중단하십시오. ' – DilithiumMatrix
사과. 외관상으로는이 해결책은 리눅스 특유하다. – unutbu
시도해 주셔서 감사합니다. – DilithiumMatrix