GIL Python действительно на интерпретатор?

Отвечать на мой собственный вопрос:

При записи оператора обновления, запишите его не в порядке.

  1. Запись UPDATE [table-name]
  2. Запись WHERE [conditions]
  3. Возвращается и пишет SET [columns-and-values]

Выбор строк, которые Вы хотите обновить перед высказыванием, что оценивает Вас, хотят измениться, намного более безопасно, чем выполнение его в другом порядке. Это лишает возможности update person set email = 'bob@bob.com' находиться в Вашем окне запроса, готовом быть выполненным неуместным нажатием клавиши, готовым испортить каждую строку в таблице.

Редактирование: Как другие сказали, запишите WHERE, пункт для Вашего удаляет перед записью DELETE.

11
задан SilentGhost 18 October 2009 в 16:03
поделиться

3 ответа

GIL действительно предназначен для каждого процесса, а не для каждого интерпретатора. Это не изменилось в 3.x.

10
ответ дан 3 December 2019 в 08:56
поделиться

Возможно, путаница возникает из-за того, что большинство людей предположим, что у Python есть один интерпретатор на процесс. Я помню, как читал, что поддержка нескольких интерпретаторов через C API в основном не тестировалась и почти никогда не использовалась. (И когда я попробовал, не сработало должным образом.)

3
ответ дан 3 December 2019 в 08:56
поделиться

Я считаю, что верно (по крайней мере, начиная с Python 2.6), что каждый процесс может иметь не более одного встроенного интерпретатора CPython (другие среды выполнения могут иметь другие ограничения). Я не уверен, что это проблема GIL как такового, но, вероятно, это связано с глобальным состоянием или для защиты от конфликтующего глобального состояния в сторонних модулях C. Из документации API CPython : ​​

[Py ___ Initialize ()] не работает при повторном вызове (без первого вызова Py_Finalize ()). Нет возвращаемого значения; это фатальная ошибка, если инициализация не удалась.

Возможно, вас заинтересует проект Unladen Swallow , цель которого в конечном итоге полностью удалить GIL из CPython. В других средах выполнения Python вообще нет GIL, например (я полагаю) Stackless Python и, конечно, Jython .

Также обратите внимание, что GIL все еще присутствует в CPython 3.x .

0
ответ дан 3 December 2019 в 08:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: