Хобрук: Ваш путь к мастерству в программировании

почему моя программа завершает работу и не работает вечно

У меня есть скопированный код клиента websocket. Он работает, за исключением того, что он завершает работу после печати Hello 1. .Hello 2 и Hello 3, а затем он завершает работу. Я бы предположил, что run_forever означает, что он будет работать вечно, так почему же он завершает работу? Как заставить программу ждать сообщения веб-сокета?

import thread
import pdb
import websocket
import time
import requests

def on_message(ws, message):
    print message

def on_error(ws, error):
    print error

def on_close(ws):
    print "### closed ###"

def on_open(ws):
    def run(*args):
        for i in range(3):
            time.sleep(1)
            ws.send("Hello %d" % i)
        time.sleep(1)
        ws.close()
        print "thread terminating..."
    thread.start_new_thread(run, ())

if __name__ == "__main__":
    URL = "http://127.0.0.1:8000/login/"

    client = requests.session()

    EMAIL = "u234234"
    PASSWORD = "t234ri3234221"

    login_data = dict(username=EMAIL, password=PASSWORD)
    r = client.post(URL, data=login_data, headers=dict(Referer=URL))

    websocket.enableTrace(True)
    ws = websocket.WebSocketApp("ws://localhost:8080/",
                              on_message = on_message,
                              on_error = on_error,
                              on_close = on_close,
        )
    ws.on_open = on_open
    ws.run_forever()
02.02.2015

  • Источник объясняет, что он работает до тех пор, пока доступен сокет 03.02.2015

Ответы:


1

Я не могу утверждать, что знаю очень много об использовании веб-сокетов в python, но в целом, когда вы закрываете сокет, вы также закрываете связанное с ним соединение. Таким образом, чтобы сохранить соединение открытым, я думаю, вы можете попробовать удалить строку ws.close() из вашей функции on_open.

02.02.2015
  • Спасибо за ответ. Я ожидаю, что thread.start_new_thread(run, ()) запустит еще один запуск.. нет? 03.02.2015
  • Новые материалы

    Учебные заметки JavaScript Object Oriented Labs
    Вот моя седьмая неделя обучения программированию. После ruby ​​и его фреймворка rails я начал изучать самый популярный язык интерфейса — javascript. В отличие от ruby, javascript — это более..

    Разбор строк запроса в vue.js
    Иногда вам нужно получить данные из строк запроса, в этой статье показано, как это сделать. В жизни каждого дизайнера/разработчика наступает момент, когда им необходимо беспрепятственно..

    Предсказание моей следующей любимой книги 📚 Благодаря данным Goodreads и машинному обучению 👨‍💻
    «Если вы не любите читать, значит, вы не нашли нужную книгу». - J.K. Роулинг Эта статья сильно отличается от тех, к которым вы, возможно, привыкли . Мне очень понравилось поработать над..

    Основы принципов S.O.L.I.D, Javascript, Git и NoSQL
    каковы принципы S.O.L.I.D? Принципы SOLID призваны помочь разработчикам создавать надежные, удобные в сопровождении приложения. мы видим пять ключевых принципов. Принципы SOLID были разработаны..

    Как настроить Selenium в проекте Angular
    Угловой | Селен Как настроить Selenium в проекте Angular Держите свое приложение Angular и тесты Selenium в одной рабочей области и запускайте их с помощью Mocha. В этой статье мы..

    Аргументы прогрессивного улучшения почти всегда упускают суть
    В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

    Введение в Джанго Фреймворк
    Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..