Почему процессы в Python не удаляются автоматически после их выполнения?

  • 14 августа 2023 г. 2:06
Ответы на вопрос 2
Процессы в Python не удаляются автоматически после их выполнения, потому что обработчик мусора (garbage collector) не может автоматически определить, что процесс больше не используется и может быть удален. Это делает Python более гибким, так как позволяет сохранить ресурсы памяти для последующего использования.

Чтобы решить проблему увеличения количества процессов после выполнения программы несколько раз, можно явно завершать процесс Python в конце программы, используя метод `sys.exit()` из модуля `sys`. Это приведет к закрытию всех связанных процессов.

Пример использования `sys.exit()`:

```python
import sys

# ...

def Main():
    # ...

    sys.exit()

Main()
```

Относительно оптимизации кода, можно сделать следующие рекомендации:

1. Изменить способ записи в файл "cards.txt". В текущей реализации каждая карта записывается в файл отдельно при каждом вызове `MakeCard()`. Вместо этого, можно создать список карт в функции `Main()`, а затем один раз записать все карты в файл.
2. Вместо использования цикла `for` для обхода списка `words`, можно использовать просто `for word in words`. Это более питоничный способ обхода списка.
3. Создание объекта `Translator` внутри функции `Translate()` каждый раз может быть избыточным. Можно создать его один раз вне функции и передавать в нее как аргумент.
4. Добавить обработку исключений в случае возникновения ошибок при переводе, чтобы программа не прерывалась при первой ошибке.

Вот оптимизированный пример вашего кода:

```python
import sys
from googletrans import Translator

def SplitText(text):
    words = text.split()
    return words

def MakeCards(cards):
    with open("cards.txt", "w") as file:
        file.write('\n'.join(cards))

def Translate(translator, word):
    card = [str(word)]
    try:
        translation = translator.translate(word, src="en", dest="ru")
        card.append(translation.text)
    except Exception as e:
        print("Error translating:", word, e)
    return card

def Main():
    text = input("Your text:")
    words = SplitText(text)
    translator = Translator()
    cards = []
    for word in words:
        card = Translate(translator, word)
        cards.append(' --- '.join(card))
    MakeCards(cards)
    sys.exit()

Main()
```

Обратите внимание, что создание объекта `Translator` и списка `cards` происходит только один раз в функции `Main()`. Ловушка `try-except` позволяет обработать исключения и продолжить перевод остальных слов, даже если возникают ошибки при переводе отдельных слов. В конце программы вызывается `sys.exit()`, чтобы корректно завершить все процессы Python.
Python автоматически освобождает ресурсы, связанные с процессами. Возможно, проблема может быть связана с использованием Thonny.
Похожие вопросы