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

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

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

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

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

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

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

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


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