Как я могу зарезервировать оперативную память для моего скрипта на Python?

#python #memory #sharing

#python #память #общий доступ

Вопрос:

Я использую сервер в моем университете совместно с другими студентами. Оперативная память сервера слишком мала, и я сталкиваюсь с ситуацией, когда я почти никогда не могу запускать свои программы из-за ошибки памяти. Скрипт выполняется фрагментарно, но если происходит перегрузка сервера, я облажался.

У вас есть какие-либо советы? Возможно, есть способ зарезервировать оперативную память для моего процесса на Python. Я знаю, что освободить память из python довольно нетривиально. Возможно, я смогу написать скрипт, который выделит память моему Python, когда он станет свободным. После того, как у меня будет достаточно, возможно, я смогу использовать gc.collect(), но каким-то образом обеспечить, чтобы память оставалась на моем компьютере для запуска сценариев?

Спасибо!

Редактировать: я предоставляю шаг, на котором скрипт тормозит. Я сохраняю данные порциями. Я смог запустить его вчера! Я знаю, что могу увеличить количество блоков, но сегодня у меня было меньше 5 ГБ оперативной памяти, когда это произошло.

     for hour in np.arange(logins.hours.min(),logins.hours.max() 1):
        start_time = time.time()
        dict_choices=process_day(hour,dict_choices).copy()
        df=pd.DataFrame.from_dict(dict_choices,orient='index') 
        df['hour']=hour
        rezovi[i]=df
        i=i 1
        print("Handled hour {} in year {} in %s seconds (iteration {}) ---".format(-hour/mini,year,i) % round((time.time() - start_time),2))

        if ((i % 100)==0):
               rezultat=pd.concat([df for df in rezovi.values()], ignore_index=False).reset_index()
               keep=list(rezultat.columns.values[0:7])
               keep.append('hour')
               rezultat=rezultat[keep]
               rezultat=convert_types(rezultat,print_info=True)
               rezultat.to_csv('save/2018/chunk' str(hour) '.csv')
               del rezovi,rezultat,keep,df
               gc.collect()
               rezovi={}
               i=0
  

Комментарии:

1. Если сервер не предоставляет вам память, в самом скрипте на самом деле нет ничего, что могло бы заставить его это сделать. Или вы хотите сказать, что во время выполнения вашего скрипта случайным образом во время выполнения запускаются другие процессы, которые приводят к нехватке памяти на сервере; и вы пытаетесь с самого начала использовать всю память самостоятельно, чтобы не позволить другим процессам получить ее …?

2. Исправьте свой код, чтобы он не использовал память, которая ему не нужна. То, что вы считаете неудобством в университетской среде, — это огромная проблема на веб-серверах с высоким трафиком, которым приходится совместно использовать одну и ту же память для множества одновременных запросов. Например, вместо загрузки текстового файла в память, загружайте его построчно или фрагмент за фрагментом. Повторно используйте один и тот же буфер вместо того, чтобы каждый раз выделять новые.

3. Лучшее, что вы можете здесь сделать, это оптимизировать свой код, чтобы сократить использование памяти. Рассмотрите возможность использования del для удаления объектов, которые вам больше не нужны. И, как сказал Панайотис, загружайте данные в память небольшими порциями, а не все сразу.

4. Обычно вы бы не справились с этим из Python. Обычный подход к такого рода проблемам заключается в настройке очереди заданий на сервере. Существует множество систем, позволяющих вам определять приоритеты, ограничения ресурсов и т.д., Чтобы убедиться, что использование сервера является справедливым и задания не конкурируют друг с другом.

5. Знаете ли вы, какая часть вашего скрипта на Python потребляет всю эту память? Пожалуйста, покажите это, отредактировав свой вопрос.