powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / PyQt истинно многопоточный?
9 сообщений из 9, страница 1 из 1
PyQt истинно многопоточный?
    #39713909
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Насколько я понял GIL не позволяет выполнять более одного потока одновременно. Поэтому модуль threading по сути является однопоточным, а multiprocessing- многопоточным. Но во втором случае нет общей памяти, поэтому мой взор пал на PyQt, поскольку в С++ эта библиотека обладает обоими преимуществами: реально многопоточная + можно читать/писать глобальные переменные.

Или PyQt тоже позволяет одновременно выполнять только 1 поток?
...
Рейтинг: 0 / 0
PyQt истинно многопоточный?
    #39713953
Фотография NekZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQL,

Тебе никто не запрещает использовать нативные потоки в параллельных сценариях, но если два или больше из них будут менять
глобальное состояние интерпретатора Python'а -- жди беды. GIL сделан не просто так. Хоть threading и порождает нативные потоки,
все они принудительно сериализуются GIL'ом.
То есть, если в твоих потоках будет исполняться нативный код (не будет параллельных вызовов к libpython) то проблем внутри
интерпретатора быть не должно. Обычно, это условие навязывается путём оборачивания вызовов нативного кода в макросы
Py_BEGIN_ALLOW_THREADS и Py_END_ALLOW_THREADS, которые вызывают PyEval_SaveThread и PyEval_RestoreThread соответственно.
...
Рейтинг: 0 / 0
PyQt истинно многопоточный?
    #39713973
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NekZAlekseySQL,

Тебе никто не запрещает использовать нативные потоки в параллельных сценариях, но если два или больше из них будут менять
глобальное состояние интерпретатора Python'а -- жди беды. GIL сделан не просто так. Хоть threading и порождает нативные потоки, все они принудительно сериализуются GIL'ом.

В книге Лутца "Программирование на Python", том 1, рассказывается о создании нативных процессов с помощью os.fork(), но как только он начинает рассматривать потоки, так сразу (на стр.272) говорит, что потоки выполнения принудительно синхронизируются GIL и выполняются последовательно. Так что о каких нативных потоках вы говорите, мне не понятно. Как их создать?
...
Рейтинг: 0 / 0
PyQt истинно многопоточный?
    #39713974
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может в топике не точно выразился: под многопоточностью библиотеки PyQt я имею ввиду многопоточность, достигаемую с помощью объектов QThread, QThreadPool и QConcurent.
...
Рейтинг: 0 / 0
PyQt истинно многопоточный?
    #39713979
Фотография NekZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLВ книге Лутца "Программирование на Python", том 1, рассказывается о создании нативных процессов с помощью os.fork(), но как только он начинает рассматривать потоки, так сразу (на стр.272) говорит, что потоки выполнения принудительно синхронизируются GIL и выполняются последовательно. Так что о каких нативных потоках вы говорите, мне не понятно. Как их создать?
Всё правильно. Python создаёт нативные потоки, пользуясь pthread под никсами, как и остальные многопоточные программы,
но все его потоки принудительно сериализованы и истинно параллельного выполнения не происходит. Точно так же ведут себя
многопоточные программы, выполняемые на компьютере с единственным CPU ядром. В Python это реализовано чтобы
не сделать глобальное состояние неконсистентным.
...
Рейтинг: 0 / 0
PyQt истинно многопоточный?
    #39713980
Фотография NekZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLМожет в топике не точно выразился: под многопоточностью библиотеки PyQt я имею ввиду многопоточность, достигаемую с помощью объектов QThread, QThreadPool и QConcurent.
Чудес не бывает .
...
Рейтинг: 0 / 0
PyQt истинно многопоточный?
    #39713990
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ответ нашел в книге Лучано "Python. К вершинам мастерства": ThreadPoolExecutor позволяет создавать многопоточные программы (для задач с преобладанием ввода/вывода), а ProcessPoolExecutor- многопроцессорные программы (для счетных задач).
...
Рейтинг: 0 / 0
PyQt истинно многопоточный?
    #39713996
Фотография NekZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQL,

Многопоточность != параллелизм.
...
Рейтинг: 0 / 0
PyQt истинно многопоточный?
    #39713999
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NekZAlekseySQL,

Многопоточность != параллелизм.

Я в названии темы параллелизм назвал "истинной многопоточностью" :)
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / PyQt истинно многопоточный?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]