Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
1303 / 843 / 409
Регистрация: 12.03.2018
Сообщений: 2,305
1

Pyro4. Зависание программы при проверке соединения

04.10.2018, 11:11. Показов 1683. Ответов 3

Author24 — интернет-сервис помощи студентам
Данный код проверяет соединение с сервером, который работает на виртуальной машине.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
def set_pyro(self, serv_ip):
    """
    Обновить uri и, соответственно, Proxy, если пользователь изменил ip.
    """
    uri = "PYRO:server@{0}:9090".format(serv_ip)
    self.pyro = Pyro4.core.Proxy(uri)
 
def check_connect(self):
    """
    Проверка соединения с сервером.
    """
    with self.pyro as p:
        try:
            p._pyroBind()
            print('Connection')
            self.connect = True
        except Pyro4.errors.CommunicationError:
            print('No connection')
            self.connect = False
При вызове метода check_connect() основная программа (GUI, wxPython) подвисает на секунд 10-15, можно этого как-то избежать?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.10.2018, 11:11
Ответы с готовыми решениями:

Таймаут при проверке соединения с интернетом
С помощью InternetOpen и InternetOpenUrl я пытаюсь проверить подключен ли компьютер к инету....

Зависание выполнения SQL запроса при разрыве соединения с сервером PostgreSQL
Здравствуйте. Помогите решить вот такую проблему. Система: AstraLinux, Lazarus 2.0.2, PostgreSQL...

Сайт CodeWars при проверке решения выдаёт ошибку, при проверке в VisualStudio ошибки нет
Задача написать метод,который будет проверять порядок круглых скобок. Написал код, проверил в...

Поведение программы при проверке обновлений
Ребята... Я перелазил весь майкрасофтовский сайт MSDN и не нашёл не чего дельного и понятного =(...

3
Эксперт Python
4632 / 2050 / 361
Регистрация: 17.03.2012
Сообщений: 10,133
Записей в блоге: 6
04.10.2018, 11:38 2
Лучший ответ Сообщение было отмечено ioprst как решение

Решение

Запускать соединение в отдельном потоке, см. Python Threading.
1
1303 / 843 / 409
Регистрация: 12.03.2018
Сообщений: 2,305
06.11.2018, 10:18  [ТС] 3
При использовании multiprocessing возникла проблема. Функция проверки соединения та же.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
        from multiprocessing import Process
 
        fc = FileClient(ip)
        proc = Process(target=fc.check_connect)
        proc.start()
        # print(proc.is_alive())
        proc.join()
        # print(proc.is_alive())
 
        while not fc.connect:
            dialog = Dialogs.IpError(ip)
            res = dialog.ShowModal()
            if res == wx.ID_OK:
                attrs = dialog.GetAttributes()
                fc.set_pyro(ip)
                proc = Process(target=fc.check_connect)
                proc.start()
                proc.join()
            else:
                return
        fc.send_data(files)
Если использовать join основная программа подвисает (что логично, если я правильно понял документацию). Если не использовать join проверка соединения каждый раз выдает отрицательный результат. Как же запустить проверку параллельно? Хотелось бы в основной программе выкинуть сообщение "Подождите ...", но если я нажимаю на окно во время выполнения проверки (c join) программа зависает, а без join, как я уже сказал, проверка никогда не успевает выполнится => цикл (while) бесконечно будет выполняться.
0
Эксперт Python
4632 / 2050 / 361
Регистрация: 17.03.2012
Сообщений: 10,133
Записей в блоге: 6
06.11.2018, 12:09 4
Ну выкините сообщение "подождите", в чём проблема
Другой поток выделяется, чтобы основной мог что-то делать, в частности, реагировать на пользователя ("не зависать"). Это до join. Логично, что после join он ждёт и "висит". То есть, join вызывайте только после того, как сделали всё, что нужно и с чистой душой можете подождать.
1
06.11.2018, 12:09
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.11.2018, 12:09
Помогаю со студенческими работами здесь

Ошибка при проверке программы через CodeGuard
Есть программа, которая работает с потоками. Все в принципе работает правильно, но при проверке...

Постепенное выполнение программы/зависание программы при выполнении
Собственно есть вопрос, возможно очень даже глупый, но все же спрошу: почему при выполнении...

Комп тормозит, программы не отвечают, при проверке на вирусы перезагружается!
Здравствуйте! У меня такая проблема-комп жутко тормозит, программы не отвечают и не дает сделать...

При проверке сайтом олимпиады программы, компилятор выдает ошибку
Сама задача. Вы пишете программу, задача которой заключается в анализе данных с биржи и принятии...

Раные значения при проверке программы маткадом являются правильным решением
Имеется программа на C# для расчета верхнего пределна интегрирования. Однако при проверке MathCAD...

Зависание программы при архивировании
procedure Pack(const Name, Path: string); var ZF: TZipFile; begin ZF := TZipFile.Create; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru