#python
Есть программа, которая неплохо справляется со своей задачей на относительно небольших числах, но когда числа увеличиваются, программа съедает всю память и делает моему процессору больно. Я хочу переписать программу так, чтобы она хранила объекты в базе данных и выполняла действия над объектами в фоновом режиме. При этом я хочу ограничить потребляемые программой ресурсы, чтобы она не сильно нагружала процессор и не кушала много памяти.
Ответы
Ответ 1
Отдельный процесс -- вам смотреть либо на модуль threading, либо multiprocessing. Вы вовсе не обязаны все данные хранить в памяти, а если речь идёт о строковых ресурсах вы вполне можете привлечь модуль ziplib, либо записывать и считывать данные из файла порциями. Если читаете из файла -- можете хранить zip-файл в памяти -- модуль mmap вам в помощь. Привлечение расширения cython поможет вам сократить потребление памяти в 5-8 раз, и ускорит ваши вычисления в 5-140 раз. Убедительная просьба: дублируйте ваши комментарии на русском языке. Не используйте сложные специфические конструкции. Не грешите скрытым атрибутами (они используются по другому). pyPC на гитхабеОтвет 2
@Montreal, вы можите очень просто значительно сократить использование памяти при помощи механизма слотов. По сути вам нужно добавить всего одну сточку: class AHuman( object ): __slots__ = ( '__sex_genes', '__mag_genes', ... ) ... В вашем случае, это должно сократить потребление памяти раз в 5.Ответ 3
@Montreal, с процессором и фоном особых проблем, думаю, нет nohup nice your-prog args & (см. man nohup, man nice) должно вполне подойти, если программа не интерактивная. А вот с памятью сложнее (конечно, можно взлянуть на ulimit в bash). Что именно Вы хотите ограничить, и собственно, что должно произойти при превышении ограничений?
Комментариев нет:
Отправить комментарий