Выбрать главу

12

Похожие инструменты вы найдете также в модуле shutil, в стандартной библиотеке Python. Он содержит высокоуровневые инструменты для выполнения операций копирования и удаления файлов и многие другие. В главе 6 мы дополнительно напишем инструменты, позволяющие выполнять операции над каталогами, такие как сравнение, копирование и поиск, после того как познакомимся с инструментами для работы с каталогами далее в этой главе.

13

В действительности функция glob просто использует стандартный модуль fnmatch для поиска имен по шаблону; смотрите описание fnmatch в примере модуля find в главе 6.

14

Для этого в Windows нужно щелкнуть на кнопке Пуск (Start), выбрать пункт меню Все программы (AH Programs) ^ Стандартные (Accessories) ^ Служебные (System TooLs) ^ Системный монитор (Resource Monitor) и перейти на монитор ЦП (CP^/За-грузка ЦП (Processor Usage) (аналогичную картину можно наблюдать на вкладке Производительность (Performance) в окне Диспетчера задач (Task Manager) ). Когда я писал эту сноску, на моем ноутбуке график не подымался выше 10% (по крайней мере, пока я не ввел while 1: pass в окне консоли интерактивного сеанса Python...).

15

По крайней мере, в текущей реализации Python функция os.fork в сценарии Python фактически копирует процесс интерпретатора (если взглянуть на список процессов, то после ветвления в нем можно будет найти два процесса Python). Но поскольку интерпретатор Python заботится обо всем, что касается работы сценария, можно считать вызов функции fork непосредственным копированием программы. Собственно, так и будет, если скомпилировать сценарии на языке Python в двоичный машинный код.

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, с помощью которой можно переопределить кодировку, используемую по умолчанию для стандартного потока вывода.