|
PyQt истинно многопоточный?
|
|||
---|---|---|---|
#18+
Насколько я понял GIL не позволяет выполнять более одного потока одновременно. Поэтому модуль threading по сути является однопоточным, а multiprocessing- многопоточным. Но во втором случае нет общей памяти, поэтому мой взор пал на PyQt, поскольку в С++ эта библиотека обладает обоими преимуществами: реально многопоточная + можно читать/писать глобальные переменные. Или PyQt тоже позволяет одновременно выполнять только 1 поток? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2018, 17:14 |
|
PyQt истинно многопоточный?
|
|||
---|---|---|---|
#18+
AlekseySQL, Тебе никто не запрещает использовать нативные потоки в параллельных сценариях, но если два или больше из них будут менять глобальное состояние интерпретатора Python'а -- жди беды. GIL сделан не просто так. Хоть threading и порождает нативные потоки, все они принудительно сериализуются GIL'ом. То есть, если в твоих потоках будет исполняться нативный код (не будет параллельных вызовов к libpython) то проблем внутри интерпретатора быть не должно. Обычно, это условие навязывается путём оборачивания вызовов нативного кода в макросы Py_BEGIN_ALLOW_THREADS и Py_END_ALLOW_THREADS, которые вызывают PyEval_SaveThread и PyEval_RestoreThread соответственно. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2018, 23:49 |
|
PyQt истинно многопоточный?
|
|||
---|---|---|---|
#18+
NekZAlekseySQL, Тебе никто не запрещает использовать нативные потоки в параллельных сценариях, но если два или больше из них будут менять глобальное состояние интерпретатора Python'а -- жди беды. GIL сделан не просто так. Хоть threading и порождает нативные потоки, все они принудительно сериализуются GIL'ом. В книге Лутца "Программирование на Python", том 1, рассказывается о создании нативных процессов с помощью os.fork(), но как только он начинает рассматривать потоки, так сразу (на стр.272) говорит, что потоки выполнения принудительно синхронизируются GIL и выполняются последовательно. Так что о каких нативных потоках вы говорите, мне не понятно. Как их создать? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2018, 08:16 |
|
PyQt истинно многопоточный?
|
|||
---|---|---|---|
#18+
Может в топике не точно выразился: под многопоточностью библиотеки PyQt я имею ввиду многопоточность, достигаемую с помощью объектов QThread, QThreadPool и QConcurent. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2018, 08:18 |
|
PyQt истинно многопоточный?
|
|||
---|---|---|---|
#18+
AlekseySQLВ книге Лутца "Программирование на Python", том 1, рассказывается о создании нативных процессов с помощью os.fork(), но как только он начинает рассматривать потоки, так сразу (на стр.272) говорит, что потоки выполнения принудительно синхронизируются GIL и выполняются последовательно. Так что о каких нативных потоках вы говорите, мне не понятно. Как их создать? Всё правильно. Python создаёт нативные потоки, пользуясь pthread под никсами, как и остальные многопоточные программы, но все его потоки принудительно сериализованы и истинно параллельного выполнения не происходит. Точно так же ведут себя многопоточные программы, выполняемые на компьютере с единственным CPU ядром. В Python это реализовано чтобы не сделать глобальное состояние неконсистентным. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2018, 08:40 |
|
PyQt истинно многопоточный?
|
|||
---|---|---|---|
#18+
AlekseySQLМожет в топике не точно выразился: под многопоточностью библиотеки PyQt я имею ввиду многопоточность, достигаемую с помощью объектов QThread, QThreadPool и QConcurent. Чудес не бывает . ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2018, 08:41 |
|
PyQt истинно многопоточный?
|
|||
---|---|---|---|
#18+
Ответ нашел в книге Лучано "Python. К вершинам мастерства": ThreadPoolExecutor позволяет создавать многопоточные программы (для задач с преобладанием ввода/вывода), а ProcessPoolExecutor- многопроцессорные программы (для счетных задач). ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2018, 09:52 |
|
PyQt истинно многопоточный?
|
|||
---|---|---|---|
#18+
AlekseySQL, Многопоточность != параллелизм. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2018, 10:27 |
|
|
start [/forum/topic.php?fid=23&msg=39713996&tid=1460151]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
99ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
others: | 322ms |
total: | 513ms |
0 / 0 |