Я пытаюсь убедить моего коллегу, что использование подпроцесса для получения головы репо - это плохо, потому что порождение подпроцесса или создание процесса сопряжено с большими издержками. Чтобы убедить его, я создал два сценария и профилировал их, но результаты оказались не такими, как я ожидал (python - git будет быстрее, чем подпроцесс).
Это первый сценарий - test_git_module.py
который я профилировал
import git
def test():
repo = git.Repo(".", search_parent_directories=True)
test()
После профилирования с помощью cProfile - python3 -m cProfile test_git_module -s
я получил вывод 78059 function calls (75806 primitive calls) in 0.130 seconds
С другой стороны , когда я Профилированный скрипт test_subprocess.py
вывод был 6529 function calls (6430 primitive calls) in 0.017 seconds
test_subprocess.py
import subprocess
import os
import sys
def test():
SELF_DIRPATH = os.path.dirname(__file__)
WORKSPACE_DIRPATH = (
subprocess.run(["git", "rev-parse", "--show-toplevel"], stdout=subprocess.PIPE, check=True)
.stdout.decode(sys.stdout.encoding)
.strip()
)
test()
Итак, ясно, что в этом python - git совсем не помогает, и это тот, который действительно медлителен для выполнения таких задач. Это подводит меня к вопросу, что когда и почему кто-то должен использовать Python - GIT над подпроцессом?