C를 사용하여 Python 코드 속도 향상(추가 라이브러리 없음)

WBOY
풀어 주다: 2024-08-21 15:47:02
원래의
1006명이 탐색했습니다.

참고: 원래 내 하위 스택에 게시됨: https://open.substack.com/pub/andresalvareziglesias/p/speeding-up-python-code-with-c-and

Python은 속도의 패러다임이 아닙니다. 우리 모두는 이것을 알고 있습니다. 하지만 우리의 오랜 친구 C의 도움으로 앱의 일부 중요한 부분의 속도를 높일 수 있습니다.

Speeding up Python code with C (and no extra libraries)

일반 Python의 피보나치 수열

피보나치 수열은 소프트웨어 개발을 가르치는 데 사용되는 전형적인 예입니다. 0과 1로 시작하는 일련의 숫자입니다. 이후의 각 숫자는 이전 두 숫자의 합입니다. 따라서 순서는 다음과 같습니다: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ...

다음과 같은 방법으로 Python에서 Fibonacci를 개발할 수 있습니다.

import time

# Configure iterations
iterations = 30

# Define fibonacci in native python
def fibonacci(n):
  if n <= 1:
    return n
  else:
    return fibonacci(n-1) + fibonacci(n-2)

# Calculate in pure python
start_time = time.perf_counter()
print(f"Calculating {iterations} iterations of fibonacci...")
print(fibonacci(iterations))
end_time = time.perf_counter()
execution_time_ms = (end_time - start_time) * 1000
print(f"Execution time: {execution_time_ms:.2f} milliseconds")
print()
로그인 후 복사

이 순수 Python(Google IDX 가상 머신에서) 버전의 Fibonacci를 실행하면 다음을 얻게 됩니다.

  • 10회 반복: 5.77밀리초
  • 30회 반복: 984.36밀리초
  • 50회 반복: (프로세스를 취소해야 해서 시간이 너무 많이 걸립니다)

C의 피보나치 수열

일반 C에서도 동일한 시퀀스를 개발할 수 있습니다:

#include <stdio.h>

int fibonacci(int n) {
    if (n <= 1) {
        return n;
    } else {
        return fibonacci(n - 1) + fibonacci(n - 2);
    }
}
로그인 후 복사

GCC로 라이브러리 컴파일:

gcc -o fibonacci.so -shared -fPIC -O2 fibonacci.c
로그인 후 복사

이제 피보나치 수열 함수가 포함된 네이티브 바이너리 라이브러리가 생겼습니다. ctypes(Python 자체는 C로 개발되었기 때문에 Python C 유형 라이브러리)를 사용하여 Python 앱 내에 이 라이브러리를 포함할 수 있습니다.

import time
from ctypes import c_double, c_int, CDLL

# Configure iterations
iterations = 30

# Import the C library
library = CDLL('./fibonacci.so')
fibonacciAsLibrary = library.fibonacci
fibonacciAsLibrary.restype = c_int

# Calculate as C library
start_time = time.perf_counter()
print(f"Calculating {iterations} iterations of fibonacci as C library...")
print(fibonacciAsLibrary(iterations))
end_time = time.perf_counter()
execution_time_ms = (end_time - start_time) * 1000
print(f"Execution time: {execution_time_ms:.2f} milliseconds")
print()
로그인 후 복사

이제 이 버전을 Fibonacci에서 실행하면 다음과 같은 결과를 얻습니다.

  • 10회 반복: 0.54밀리초
  • 30회 반복: 6.92밀리초
  • 50회 반복: 82324.90밀리초

더 좋지 않나요?

Python 및 C 통합 사용 사례

다음과 같은 다양한 앱과 시나리오에서 이러한 종류의 통합을 사용할 수 있습니다.

  • Django 앱에서 직렬 변환기 및 역직렬 변환기 속도를 높이세요
  • 워크플로우에서 중요한 부분의 속도를 높이세요
  • OS와의 낮은 수준의 상호작용
  • 기타

당신은요? 프로젝트에서 이 작은 트릭을 어떻게 사용하시겠습니까? 여러분의 의견을 듣고 싶습니다!

목록에 대하여

Python 및 Docker 게시물 중에서 다음과 같은 다른 관련 주제(언제나 기술 및 프로그래밍 주제에 대해 약속합니다...)에 대해서도 글을 쓸 것입니다.

  • 소프트웨어 아키텍처
  • 프로그래밍 환경
  • 리눅스 운영체제
  • 기타

흥미로운 기술, 프로그래밍 언어 등을 발견했다면 알려주세요! 저는 항상 새로운 것을 배우는 데 열려있습니다!

저자 소개

저는 팔마에 거주하는 풀스택 소프트웨어 개발자인 Andrés입니다. 코딩 기술을 향상시키기 위한 개인적인 여정을 떠나고 있습니다. 나는 또한 내 이름으로 네 권의 소설을 출판한 자가 출판 판타지 작가이기도 합니다. 무엇이든 물어보세요!

위 내용은 C를 사용하여 Python 코드 속도 향상(추가 라이브러리 없음)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!