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

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

Сообщение Anonymous »

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

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

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 (я бы попробовал, но сейчас изучаю документацию и не готов пробовать это сам).
Тогда должно быть так: print «Привет» -> запустите 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»