Могу ли я обойти GIL Python с помощью модуля C?Python

Программы на Python
Ответить
Anonymous
 Могу ли я обойти GIL Python с помощью модуля C?

Сообщение Anonymous »

Я подумывал поэкспериментировать с Python.
Я хотел бы представить некоторую функцию, такую ​​как setTimeout или setInterval JavaScript, переносящую какое-то асинхронное поведение без большого количества блокировок. вызывает запуск цикла обработки событий.
Давайте посмотрим на этот пример (теперь, конечно, он не работает):

Код: Выделить всё

from mymod import set_timeout # of course we love the PEP8 :)
import sys, time

def say_finished():
time.sleep(2) # waiting, suppose here to have some blocking behaviour
sys.stdout.write("\nSee you!")

sys.stdout.write("Hello, ")
set_timeout(say_finished, 2000) # supposing we have msec granularity
sys.stdout.write("World!")
Мне бы хотелось, чтобы поведение было похоже на JavaScript. Если бы set_timeout запускал новый поток из-за GIL, он все равно печатал бы «Привет,\nУвидимся! Мир», потому что новый поток блокирует основной до тех пор, пока он не завершится.
Буду ли я так делать? можно ли обойти это поведение, если set_timeout будет использовать потоки Posix в коде C?
Это будет интеграция с Python C/API, а я не могу знаю, если я может обойти GIL, или сам API также принудительно блокируется GIL (я бы попробовал, но сейчас изучаю документацию и не готов пробовать это сам).
Тогда должно быть так: напечатайте «Hello» -> запустите set_timeout (который должен вернуться, чтобы позволить интерпретатору продолжить выполнение программы) -> напечатайте «World!» -> оставаться в живых, пока работает внешний поток -> обратный вызов "say_finished" -> конец.
Что заставляет меня думать, что потребуется отредактировать сам интерпретатор, так это часть, говорящая "оставаться в живых" пока работает внешний поток".
Я не хочу использовать процессы из-за накладных расходов, которые создает новый процесс.
Пожалуйста, не делайте этого. Я не говорю «тогда используйте JavaScript», потому что мне нравится синтаксис Python, и я хотел бы использовать этот подход с это.

Подробнее здесь: https://stackoverflow.com/questions/935 ... a-c-module
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»