Поцарапать диски в Python? - PullRequest
2 голосов
/ 10 апреля 2009

Я понял, что в некоторых программах Windows XP, таких как Photoshop, есть что-то, называемое «чистыми дисками». Я понял, что это означает, и, пожалуйста, исправьте меня, если я ошибаюсь, это то, что Photoshop управляет собственной виртуальной памятью на жестком диске, а не позволяет Windows управлять этим. Я понял, что причиной этого является некоторое ограничение Windows XP на то, сколько общего объема памяти может занимать процесс, независимо от места на жестком диске. Я думаю, что это около 3 ГБ. Я все правильно понял?

Я делаю приложение на Python для запуска симуляции. Это займет много памяти и будет работать на Windows XP. Возможно ли для него использовать скретч-диски? Как?

Ответы [ 7 ]

4 голосов
/ 10 апреля 2009

Пока у вас на самом деле не кончится память, думать об этом - пустая трата времени.

Когда вам, наконец, не хватит памяти, вам потребуется использовать временный файл для хранения объектов, которые нужны вашему процессу, но не помещаются в память.

Используйте pickle или shelve (см. Постоянство данных ) ваших объектов в файле. Если этот файл находится на диске с именем «нуля», это хорошо.

Иногда вы хотите, чтобы ваши временные файлы находились на отдельном диске из других рабочих файлов по соображениям производительности. В некоторых средах (SAN, NAS, массивы хранения) ваши диски являются виртуальными, и поиск «чистого» диска не имеет никакого преимущества в производительности. В других средах (т. Е. У вас есть все оборудование) вы можете помещать временные файлы на другой диск, что делает этот диск «чистым».

2 голосов
/ 10 апреля 2009

Я понял, что причиной этого является некоторое ограничение Windows XP на то, сколько общего объема памяти может занимать процесс, независимо от места на жестком диске. Я думаю, что это около 3 ГБ.

Просто к сведению, это скорее ограничение 32-битной ОС, нежели проблема Windows XP. У вас будет та же проблема в 32-битной Vista, Linux, BSD ... вы поняли идею. Если вы идете по 64-битному маршруту, у вас нет этих проблем.

Например, Windows XP x64 позволяет до 8 терабайт памяти на процесс .

1 голос
/ 10 апреля 2009

Вы можете объединить ответ С.Лотта об использовании pickle (вы должны использовать cPickle, хотя для лучшей производительности) с SqlLite.

sqlite встроен в Python 2.5 и выше, так что все, что вам нужно сделать, это импортировать :), затем просто сохраните в нем маринованные объекты в виде строк, и у вас будет хороший быстрый способ доступа к данным (по сравнению к созданию собственного метода), который также поможет вам быть организованным.

примечание: cPickle практически идентичен используемому маринаду. Разница лишь в том, что он написан на C

Полезные документы по Python:

edit : Хорошей идеей может быть ограничение использования памяти пользователем. Было бы стыдно хранить кучу данных на диске и ожидать медленного дискового ввода-вывода, когда у пользователя 8 ГБ ОЗУ;)

1 голос
/ 10 апреля 2009

Win32 API обеспечивает это: текст ссылки . Вы можете использовать эти функции через PyWin32.

1 голос
/ 10 апреля 2009

Файлы с отображением в памяти может быть то, что вы ищете. Реализация Python позволяет вам использовать файл как изменяемая строка в памяти.

1 голос
/ 10 апреля 2009

Скретч-диски принесут пользу вашему приложению в случае, если оно работает с очень большими файлами,

Так ли это?

Если нет, то я не думаю, что вы можете найти что-то, что принесет пользу вашему приложению, на чистых дисках.

0 голосов
/ 17 ноября 2010

Вы, наверное, ищете что-то вроде ZODB. Однако, хотя ZODB изо всех сил старается быть прозрачным, ни одно решение не будет на 100% свободным от артефактов. Вы должны писать свой код с осознанием того, что ваши объекты в основном живут в базе данных, но есть несколько представлений ваших объектов, есть проблемы с кэшированием / синхронизацией и т. Д. Ничто не сделает эту очень сложную проблему совершенно тривиальной для вас .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...