2016-07-27 15 views
1

У меня есть фрагмент кода, который вызывается другой функцией, выполняет некоторые вычисления для меня, а затем графики вывод в файл. Увидев, что весь сценарий может занять некоторое время для работы с большими наборами данных, и, поскольку я могу проанализировать несколько наборов данных в данный момент времени, я запустил его в screen, затем отключите и закройте сеанс шпатлевки и верните его на следующий день. Я использую Ubuntu 14.04. Мой код выглядит следующим образом (я пропустил расчеты):Pyplot "не может подключиться к X-серверу localhost: 10.0", несмотря на ioff() и matplotlib.use ('Agg')

import shelve 
import os, sys, time 
import numpy 
import timeit 
import logging 
import csv 
import itertools 

import graph_tool.all as gt 
import matplotlib 
matplotlib.use('Agg') 
import matplotlib.pyplot as plt 

plt.ioff() 

#Do some calculations 

print 'plotting indeg'  
# Let's plot its in-degree distribution 
in_hist = gt.vertex_hist(g, "in") 

y = in_hist[0] 
err = numpy.sqrt(in_hist[0]) 
err[err >= y] = y[err >= y] - 1e-2 

plt.figure(figsize=(6,4)) 
plt.errorbar(in_hist[1][:-1], in_hist[0], fmt="o", 
     label="in") 
plt.gca().set_yscale("log") 
plt.gca().set_xscale("log") 
plt.gca().set_ylim(0.8, 1e5) 
plt.gca().set_xlim(0.8, 1e3) 
plt.subplots_adjust(left=0.2, bottom=0.2) 
plt.xlabel("$k_{in}$") 
plt.ylabel("$NP(k_{in})$") 
plt.tight_layout() 
plt.savefig("in-deg-dist.png") 
plt.close() 

print 'plotting outdeg' 

#Do some more stuff 

Сценарий работает отлично счастливо, пока не дойдете до планировавших команд. Чтобы попытаться добраться до корня проблемы, я в настоящее время запускаю его в шпаклере без экрана и без приложений X11. Ouput я получаю следующее:

plotting indeg 
PuTTY X11 proxy: unable to connect to forwarded X server: Network error: Connection refused 
: cannot connect to X server localhost:10.0 

Я полагаю, это связано с кодом пытается открыть окно, но я думал, что явно установив plt.off(), который будет отключен. Поскольку это не я, то я следил за этой нитью (Generating matplotlib graphs without a running X server) и указал сервер, но это также не решило проблему. Где я могу ошибиться?

ответ

1

Вызывающая функция вызывает другие функции, которые также используют matplotlib. Эти вызовы вызываются только после этого, но во время инструкции import их зависимости загружаются. Когда они были загружены, они отключили последующую декларацию matplotlib.use('Agg'). Перемещение этой декларации в основной скрипт решило проблему.

 Смежные вопросы

  • Нет связанных вопросов^_^