Matplotlib + сокеты = зависание? - PullRequest
1 голос
/ 22 октября 2010


Я пытаюсь нанести данные, полученные через сокет. Я использую "Matplotlib" в качестве библиотеки для построения графиков и "cPickle" для сериализации объектов Python.
Когда я запускаю свой код, окно графика открывается и зависает. Я пробовал несколько способов обойти это, но без помощи
Не знаю, может ли это помочь, но ... Я использую "Python 2.7 - 32-разрядная версия" на Win 7 (64-разрядная версия). Вот мой код

def init_plot():
    matplotlib.pyplot.ion()
    figsrc = matplotlib.pyplot.figure()
    axsrc = figsrc.add_subplot(111, autoscale_on=True)

def plot(x,y,z=None):
    if z == None:
        pylab.plot(x,y)
    else:
        pylab.plot(x,y,z)
    pylab.show();

def unserialize(data):
    return pickle.loads(data)

def init_socket():
    global UDPSock,buf
    # Set the socket parameters
    host = "localhost"
    port = 21567
    buf = 10240
    addr = (host,port)

    # Create socket and bind to address
    UDPSock = socket(AF_INET,SOCK_DGRAM)
    UDPSock.bind(addr)
if __name__ == '__main__':
    init_plot()
    init_socket()
    while 1:
        data,addr = UDPSock.recvfrom(buf)
        temp = numpy.array(unserialize(data))
        plot(temp[0,:],temp[1,:])
    UDPSock.close()

Код клиента работает нормально. Я не знаю, является ли это 32-64-битной несовместимостью или какой-то проблемой кода.

Спасибо.

PS: я попробовал "pyfunc's" предложение о s.setblocking(flag) и socket.settimeout(value) ... Все еще не помогло

1 Ответ

0 голосов
/ 24 января 2011

Я думаю, вам просто нужно изменить pylab.show () на pylab.draw ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...