Читать «Программирование на Python. Том 1» онлайн - страница 663
Марк Лутц
16
В примерах использования модуля _thread в этой книге теперь везде используется функция start_new_thread. По исторически сложившимся причинам эта функция доступна также под именем thread.start_new, но в будущих версиях Python этот синоним может быть удален. В версии Python 3.1 оба имени по-прежнему доступны, но в документации, которая выводится функцией help, функция start_new объявлена устаревшей. Другими словами, ее не следует использовать, если вы беспокоитесь о будущем (и что должно учитываться в книге!).
17
Однако их нельзя использовать для непосредственной синхронизации
18
ханизмы блокировки, более долговременные и внешние по отношению
19
к программам. Вызов функции os.open, представленной в главе 4, с флагом
20
O_EXCL позволяет сценариям блокировать и разблокировать доступ к файлам и потому может считаться идеальным инструментом блокировки для использования в процессах. Обратите также внимание на инструменты син
21
хронизации в модулях multiprocessing и threading, а также прочитайте раздел
22
организации взаимодействий между процессами далее в этой главе, где представлены другие универсальные приемы синхронизации.
23
Пояснение для программистов Java: блокировки и условные переменные в языке Python являются отдельными объектами, а не чем-то присущим всем объектам, а класс Thread в языке Python не обладает всеми характеристиками, которые есть у одноименного класса в языке Java. Дополнительные детали можно найти в руководстве по библиотеке Python.
24
Понятия «клиент» и «сервер» будут разъяснены в части книги, посвященной приложениям для Интернета. Там взаимодействие будет организовано с помощью сокетов (с которыми мы встретимся далее в этой главе и которые грубо можно назвать двунаправленными каналами связи между программами, выполняющимися на компьютерах, соединенных сетью, или на одном и том же компьютере), но модель обмена информацией в целом остается схожей. Именованные каналы (fifo), описываемые ниже, лучше соответствуют модели клиент/сервер, поскольку доступ к ним может осуществляться произвольными, несвязанными процессами (выполнять ветвление при этом не требуется). Но как мы увидим, модели сокетов повсеместно используются большинством протоколов сценариев для Интернета - сообщения электронной почты, например, являются, по сути, всего лишь форматированными строками, передаваемыми между программами через сокеты со стандартными номерами портов, зарезервированными для протоколов обмена электронной почтой.
25
Сходная проблема, связанная с функцией print, описывается в главе 14, где предлагается обходное решение, позволяющее предотвратить аварийное завершение программы в случае вывода трассировочной информации в поток стандартного вывода порожденными программами. В отличие от проблемы, описываемой здесь, та проблема, похоже, не связана с выводом символов Юникода, которые могут оказаться непечатаемыми в окне командной оболочки, а отражает еще один недостаток механизма вывода в стандартный поток вывода в версии Python 3.1, который может быть исправлен к моменту, когда вы будете читать эти строки. Смотрите также описание переменной окружения PYTH0NI0ENC0DING, с помощью которой можно переопределить кодировку, используемую по умолчанию для стандартного потока вывода.