@propython

Страница 137 из 228
Matwey
05.02.2018
11:49:31
Господа

У меня вопрос по C/API

и GIL

Я к примеру вызываю функцию PyBytes_FromStringAndSize, может ли внутри неё произойти освобождение GIL, и переключение на другой поток, с последующим возвращением?

Google
V
05.02.2018
21:18:03
Не паникуйте, усех забаним)

Марк
06.02.2018
06:54:37
Я к примеру вызываю функцию PyBytes_FromStringAndSize, может ли внутри неё произойти освобождение GIL, и переключение на другой поток, с последующим возвращением?
GIL вечен. Перед переключением на другой поток, текущий останавливается, т.е. в любой момент времени может работать только один поток.

Matwey
06.02.2018
06:59:53
GIL вечен. Перед переключением на другой поток, текущий останавливается, т.е. в любой момент времени может работать только один поток.
Я не про это. Гарантируется ли, что поток не переключится на этой функции. Иными словами, не ломает ли она атомарность.

Марк
06.02.2018
07:01:08
Насколько я помню, атомарность не сломается, но работа функции может быть остановлена в её середине, например

И без проблем работа функции будет завершена, когда поток с ней вернётся в работу

Но можно использовать Lock, например, чтобы в начале функции явно его взять, и в конце ф-ии Releasнуть, если требуется, чтобы функция довела свою работу в любом случае до конца

Вообще с многопоточностью в Python есть явные проблемы, созданные by-design, ибо GIL позволяет исполняться только одному потоку одновременно. Частично можно их решить с помощью asyncio, или использовать multiproccessing, но там свои сложности

Oleg
06.02.2018
08:23:50
А с asyncio что за сложности?

Andrey
06.02.2018
09:50:54
У меня с asyncio вообще никаких сложностей, во многих задачах предпочитаю этот модуль использовать вместо multiprocessing. Особенно если выбор стоит между бесконечно крутить таски в корутинах или в отдельных процессах, особенно если они должны сами восстанавливаться в случае непредвиденных ситуаций. У multiprocessing путаница получается с общением между дочерними и родительским, если один из дочерних должен перезапускать другие в случае их завершения (появляются зомби т.д.) а вот с asyncio таких проблем нет.

Марк
06.02.2018
09:58:54
Сложности именно с multiprocesssing, c asyncio всё весьма хорошо, как заметил комментатор выше, просто я в своем последнем сообщении не совсем корректно сформулировал предложение.

Oleg
06.02.2018
10:32:59
Так asyncio на одном CPU

Andrey
06.02.2018
11:58:44
Никто не мешает их мешать, но я бы не советовал этого делать) опять же возможен зомбипрок)

Matwey
06.02.2018
12:15:57
Но можно использовать Lock, например, чтобы в начале функции явно его взять, и в конце ф-ии Releasнуть, если требуется, чтобы функция довела свою работу в любом случае до конца
Ну вот я не нашел где взять такой Lock. Я же не могу просто взять pthreads и оттуда взять Mutex, потому-что такой модуль на Windows не соберется.

Google
antonsaliy
08.02.2018
22:29:06
привет, кто-то использовал питоновскую api wrapper для биржи binance? есть один вопрос по этой теме, очень хотелось бы его решить отпишите кто шарит, пожалуйста??

Валерий
09.02.2018
09:53:22
Всем привет. Кто работал с PyQt5, подскажите почему при выполнении кода пишет: ImportError: cannot import name 'QWidget' ImportError: cannot import name 'QApplication' ???

импортировал вот так: from PyQt5.QtWidgets import QWidget, QApplication from PyQt5.QtGui import QPainter, QPainterPath from PyQt5.QtCore import Qt import sys

и пишет такое во всех примерах в инета, с книг

BlackAndOrange
09.02.2018
21:00:58
А у тебя Qt-то установлен?

Покажи вообще полный лог

Валерий
09.02.2018
21:02:41








вот видишь, что в PyQt5.QtWidgets вообще ничего нет

видно не доставился пайкьют

иначе бы ты увидел там твои модули

Выдает одну и ту же ошибку и при установленом кьюти, и при не установленом

Пробовал всячески переустанавливать – не помогло

BlackAndOrange
09.02.2018
21:11:31
print(PyQt5.QtWidgets)

Идёшь в нужную директорию

Открываешь файл QtWidgets.py

Страница 137 из 228