在 Linux 上,您可以通过以下方式分离显示器:
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 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)
没有os._exit(0)
, 主进程块。按 Ctrl-C 会终止主进程,但情节仍然存在。
随着os._exit(0)
,主要过程结束,但情节仍然存在。
叹。尝试#3。如果您将 matplotlib 调用放在另一个脚本中,那么您可以像这样使用子进程:
显示.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()
测试.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
应显示绘图并将控制权返回到终端,同时保持绘图显示。