πŸ” Как ΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ Π² Python: простыС способы для ускорСния Ρ€Π°Π±ΠΎΡ‚Ρ‹

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ Π² Python, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ gc (garbage collector). Π’ΠΎΡ‚ простой способ:

   import gc
   gc.collect()
   
Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ `gc` ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ `collect()`, которая ΠΎΡ‡ΠΈΡ‰Π°Π΅Ρ‚ мусор Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ `del` для удалСния Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ освобоТдСния памяти. НапримСр:

   x = [1, 2, 3]
   del x
   
Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ создаСм список `x`, Π° Π·Π°Ρ‚Π΅ΠΌ удаляСм Π΅Π³ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ `del`, освобоТдая ΠΏΠ°ΠΌΡΡ‚ΡŒ. НС Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅, Ρ‡Ρ‚ΠΎ Python ΠΈΠΌΠ΅Π΅Ρ‚ собствСнный ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ сборки мусора, ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ½ управляСт ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ автоматичСски. Однако, Ссли Ρƒ вас Π΅ΡΡ‚ΡŒ большиС Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ»ΠΈ слоТныС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, использованиС явных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² очистки памяти ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ.

Π”Π΅Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚

Как ΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ Π² Python

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Π°Ρ ΠΏΠ°ΠΌΡΡ‚ΡŒ (RAM) ΠΈΠ³Ρ€Π°Π΅Ρ‚ Π²Π°ΠΆΠ½ΡƒΡŽ Ρ€ΠΎΠ»ΡŒ Π² Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½Π° языкС Python. Π’ процСссС выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, опСративная ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΆΠ΅ Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΈ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ нСсколько ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² очистки ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти Π² Python.

1. ИспользованиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ del

Основной способ освобоТдСния памяти Π² Python - использованиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ del для удалСния ссылок Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ большС Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹. Π­Ρ‚ΠΎ позволяСт ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρƒ Python ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ для этих ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ del:


    x = [1, 2, 3]
    del x
    

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, послС выполнСния del x опСративная ΠΏΠ°ΠΌΡΡ‚ΡŒ, выдСлСнная для списка x, Π±ΡƒΠ΄Π΅Ρ‚ освобоТдСна.

2. ИспользованиС модуля gc

ΠœΠΎΠ΄ΡƒΠ»ΡŒ gc (garbage collector) прСдоставляСт возмоТности для контроля Π½Π°Π΄ сборкой мусора, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ освобоТдСниС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти. МоТно Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ сборку мусора, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΎΡ‚ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π’ΠΎΡ‚ ΠΊΠ°ΠΊ это ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ:


    import gc
    
    # Π’Ρ‹Π·ΠΎΠ² gc.collect() освобоТдаСт ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π·Π°Π½ΡΡ‚ΡƒΡŽ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ
    gc.collect()
    

3. ИспользованиС модуля tracemalloc

ΠœΠΎΠ΄ΡƒΠ»ΡŒ tracemalloc прСдоставляСт возмоТности для отслСТивания использования ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти ΠΈ выявлСния ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ памяти Π² Python. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ tracemalloc для выявлСния ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ памяти:


    import tracemalloc
    
    # Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ отслСТивания использования ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти
    tracemalloc.start()
    
    # Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° для отслСТивания ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ памяти
    
    # ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ статистики использования ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти
    snapshot = tracemalloc.take_snapshot()
    top_stats = snapshot.statistics('lineno')
    
    # Π’Ρ‹Π²ΠΎΠ΄ Ρ‚ΠΎΠΏ-10 ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΡ… большС всСго памяти
    for stat in top_stats[:10]:
        print(stat)
    
    # ΠžΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° отслСТивания использования ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти
    tracemalloc.stop()
    

ΠœΠΎΠ΄ΡƒΠ»ΡŒ tracemalloc позволяСт Π²Ρ‹ΡΠ²Π»ΡΡ‚ΡŒ ΡƒΡ‚Π΅Ρ‡ΠΊΠΈ памяти ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ использованиС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти Π² Python.

4. ИспользованиС конструкции with

Для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ рСсурсы ΠΈΠ»ΠΈ ΠΏΠ°ΠΌΡΡ‚ΡŒ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ with для автоматичСского освобоТдСния памяти ΠΈ рСсурсов послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π±Π»ΠΎΠΊΠ° ΠΊΠΎΠ΄Π°. НапримСр, для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ конструкция with open():


    with open('file.txt', 'r') as f:
        # Код для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ„Π°ΠΉΠ»ΠΎΠΌ
    
    # ΠŸΠ°ΠΌΡΡ‚ΡŒ ΠΈ рСсурсы, связанныС с Ρ„Π°ΠΉΠ»ΠΎΠΌ, Π±ΡƒΠ΄ΡƒΡ‚ автоматичСски освобоТдСны
    

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, использованиС конструкции with ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ памяти ΠΈ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ освобоТдСниС рСсурсов.

5. ИспользованиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sys.getsizeof()

ΠœΠΎΠ΄ΡƒΠ»ΡŒ sys прСдоставляСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ getsizeof(), которая Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² Π±Π°ΠΉΡ‚Π°Ρ…. ΠŸΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ большиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ памяти. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ getsizeof():


    import sys
    
    x = [1, 2, 3]
    print(sys.getsizeof(x))
    

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ функция getsizeof() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ списка x Π² Π±Π°ΠΉΡ‚Π°Ρ….

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

ΠžΡ‡ΠΈΡΡ‚ΠΊΠ° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти Π² Python Π²Π°ΠΆΠ½Π° для обСспСчСния ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ прСдотвращСния ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ памяти. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π±Ρ‹Π»ΠΈ прСдставлСны Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ очистки памяти, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ использованиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ del, ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ gc ΠΈ tracemalloc, конструкции with ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sys.getsizeof(). РСгулярноС освобоТдСниС памяти ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ эффСктивныС ΠΈ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° языкС Python.

Π’ΠΈΠ΄Π΅ΠΎ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Π² python

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Python Π² ΠžΠ—Π£ | ЗапускаСм строки Python Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти

Π Π°Π±ΠΎΡ‚Π° с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ Python Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти. IO Python - Π‘ΠΎΠ±ΠΈΡ€Π°Π΅ΠΌ Ρ„Π°ΠΉΠ»Ρ‹ Π² ΠžΠ—Π£

ΠŸΠΎΡ…ΠΎΠΆΠΈΠ΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ:

Как ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Python Π² Ubuntu: ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ руководство с шагами πŸπŸ”§

πŸ” Как ΠΏΠ΅Ρ€Π΅ΠΌΠ½ΠΎΠΆΠΈΡ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π² Python NumPy: ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ руководство для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…

Как ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ if-ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π² Python? πŸ˜„

πŸ” Как ΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ Π² Python: простыС способы для ускорСния Ρ€Π°Π±ΠΎΡ‚Ρ‹

Как ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ остаток ΠΎΡ‚ дСлСния 5 Π½Π° 3 Π² Python? 🐍

πŸ”„ Как ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ мСстами строки Π² Python: простоС руководство с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ

🎨Как ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ‚Π΅ΠΌΡƒ Π² Python?