Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 28, 2020 20:43:38

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Pyqt + Asyncio

Amperandus1
Не знаю насколько правильное решение
скорее всего неправильное
https://gist.github.com/nvgoldin/30cea3c04ee0796ebd0489aa62bcf00a
У вас работает пока вы не попали моментом закрытия на обработку очередного запроса сервером.



Офлайн

#2 Март 3, 2020 10:36:03

Amperandus1
Зарегистрирован: 2020-02-27
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Pyqt + Asyncio

К сожалению

18.5.1.12. UNIX signals
Availability: UNIX only.

Офлайн

#3 Март 3, 2020 11:24:29

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Pyqt + Asyncio

Amperandus1
Есть ли способ подружить pyqt и asyncio?

Задача: из gui сделать две кнопки - старт и стоп сервера. Код сервера запускается из QThread. Сделан на async/await. По отдельности все ок. Вместе не получается.
зачем вам этот геморой? сервер должен быть отдельно, ГУИ отдельно. А сервер в отдельном потоке с ГУИ идея так себе..
По нажатию кнопки “старт” ГУИ запускает новый процесс с сервером, запоминает его pid, по нажатию кнопки “стоп”, останавливает его штатно, или просто убивает процесс по таймауту, если сервер не скушал вовремя команду стоп.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Март 3, 2020 11:24:41)

Офлайн

#4 Март 3, 2020 12:35:40

Amperandus1
Зарегистрирован: 2020-02-27
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Pyqt + Asyncio

Нужен обмен между сервером и GUI. Ну и попрактиковаться в том числе.

     async def serverInit(self, sigServ):
        self.signal = sigServ
        self.run = True
        self.server = await asyncio.start_server(self.readFromServer, self.host, self.port)
        await self.server.serve_forever()
    async def readFromServer(self, reader, writer):
        self.writers.append(writer)
        data = await reader.read(1024)
        if(self.run == True):
            self.signal.emit(f'Received: {data.decode()!r}')
        writer.close()
    def stop(self):
        self.run = False
        for w in self.writers:
            w.close()
        time.sleep(1)
        self.server.close()

Вот как то так включается / выключается и соединения не висят

Отредактировано Amperandus1 (Март 3, 2020 13:09:58)

Офлайн

#5 Март 3, 2020 17:32:55

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Pyqt + Asyncio

Amperandus1
Нужен обмен между сервером и GUI.
для этого есть: сокеты, http(s), pipe, брокеры сообщений типа RabbitMQ или ZeroMQ, shared memory, и пр..
https://docs.python.org/3.8/library/ipc.html
На крайний случай смотрите в сторону asyncio.subprocess хотябы.

Amperandus1
Ну и попрактиковаться в том числе.
в данном случае вы практикуетесь в скрещивании ежа с ужом… лучше попрfктикйтес в межпроцессовой коммуникации, будет больше пользы , ИМХО.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version