참고: 원래 내 하위 스택에 게시됨: https://open.substack.com/pub/andresalvareziglesias/p/speeding-up-python-code-with-c-and
Python은 속도의 패러다임이 아닙니다. 우리 모두는 이것을 알고 있습니다. 하지만 우리의 오랜 친구 C의 도움으로 앱의 일부 중요한 부분의 속도를 높일 수 있습니다.
피보나치 수열은 소프트웨어 개발을 가르치는 데 사용되는 전형적인 예입니다. 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를 실행하면 다음을 얻게 됩니다.
일반 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에서 실행하면 다음과 같은 결과를 얻습니다.
더 좋지 않나요?
다음과 같은 다양한 앱과 시나리오에서 이러한 종류의 통합을 사용할 수 있습니다.
당신은요? 프로젝트에서 이 작은 트릭을 어떻게 사용하시겠습니까? 여러분의 의견을 듣고 싶습니다!
Python 및 Docker 게시물 중에서 다음과 같은 다른 관련 주제(언제나 기술 및 프로그래밍 주제에 대해 약속합니다...)에 대해서도 글을 쓸 것입니다.
흥미로운 기술, 프로그래밍 언어 등을 발견했다면 알려주세요! 저는 항상 새로운 것을 배우는 데 열려있습니다!
저는 팔마에 거주하는 풀스택 소프트웨어 개발자인 Andrés입니다. 코딩 기술을 향상시키기 위한 개인적인 여정을 떠나고 있습니다. 나는 또한 내 이름으로 네 권의 소설을 출판한 자가 출판 판타지 작가이기도 합니다. 무엇이든 물어보세요!
위 내용은 C를 사용하여 Python 코드 속도 향상(추가 라이브러리 없음)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!