برنامه نویسی

افزایش سرعت کد پایتون با C (و بدون کتابخانه اضافی)

Summarize this content to 400 words in Persian Lang

توجه: ابتدا در Substack من پست شده است: https://open.substack.com/pub/andresalvareziglesias/p/speeding-up-python-code-with-c-and

پایتون پارادایم سرعت نیست، همه ما این را می دانیم. اما ما می‌توانیم با کمک دوست خوب قدیمی‌مان سی.

دنباله فیبوناچی در پایتون ساده

دنباله فیبوناچی یک مثال کلاسیک است که برای آموزش توسعه نرم افزار استفاده می شود. مجموعه ای از اعداد است که با 0 و 1 شروع می شود. هر عدد بعدی مجموع دو عدد قبلی است. بنابراین، دنباله به این صورت است: 0، 1، 1، 2، 3، 5، 8، 13، 21، 34، …

ما می توانیم فیبوناچی را در پایتون به این ترتیب توسعه دهیم:

import time

# Configure iterations
iterations = 30

# Define fibonacci in native python
def fibonacci(n):
if n

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اگر این نسخه خالص پایتون (در ماشین مجازی Google IDX) فیبوناچی را اجرا کنیم، دریافت می کنیم:

10 تکرار: 5.77 میلی ثانیه
30 تکرار: 984.36 میلی ثانیه
50 تکرار: (من باید روند را لغو کنم، زمان زیادی است)

دنباله فیبوناچی در C

ما می توانیم همان دنباله را در C ساده ایجاد کنیم:

#include

int fibonacci(int n) {
if (n

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

کامپایل کتابخانه با GCC:

gcc -o fibonacci.so -shared -fPIC -O2 fibonacci.c

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اکنون، یک کتابخانه باینری بومی داریم که تابع دنباله فیبوناچی در داخل آن است. ما می توانیم این کتابخانه را در داخل یک برنامه پایتون با ctypes جاسازی کنیم (کتابخانه انواع Python C، زیرا خود پایتون در C توسعه یافته است):

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()

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

حال اگر این نسخه را بر روی فیبوناچی اجرا کنیم، دریافت می کنیم:

10 تکرار: 0.54 میلی ثانیه
30 تکرار: 6.92 میلی ثانیه
50 تکرار: 82324.90 میلی ثانیه

بهتر است، نه؟

از موارد برای ادغام Python و C استفاده کنید

ما می توانیم از این نوع ادغام در بسیاری از برنامه ها و سناریوها استفاده کنیم، مانند:

در برنامه جنگو ما، سریال‌سازها و deserializers را افزایش دهید
سرعت بخشیدن به بخش های حیاتی در یک گردش کار
تعاملات سطح پایین با سیستم عامل
و غیره

و شما؟ چگونه از این ترفند کوچک در پروژه خود استفاده خواهید کرد؟ من دوست دارم نظرات شما را بشنوم!

درباره لیست

در بین پست های پایتون و داکر، در مورد موضوعات مرتبط دیگر نیز می نویسم (موضوعات همیشه فنی و برنامه نویسی، قول می دهم … با انگشتان دست زده) مانند:

معماری نرم افزار
محیط های برنامه نویسی
سیستم عامل لینوکس
و غیره

اگر فناوری، زبان برنامه نویسی یا هر چیز دیگری پیدا کردید، لطفاً به من اطلاع دهید! من همیشه برای یادگیری چیزهای جدید باز هستم!

درباره نویسنده

من آندرس هستم، یک توسعه دهنده نرم افزار تمام پشته مستقر در پالما، در یک سفر شخصی برای بهبود مهارت های برنامه نویسی خود. من همچنین یک نویسنده فانتزی خود منتشر شده با چهار رمان منتشر شده به نام خود هستم. راحت از من هر چیزی بپرسید!

توجه: ابتدا در Substack من پست شده است: https://open.substack.com/pub/andresalvareziglesias/p/speeding-up-python-code-with-c-and

پایتون پارادایم سرعت نیست، همه ما این را می دانیم. اما ما می‌توانیم با کمک دوست خوب قدیمی‌مان سی.

افزایش سرعت کد پایتون با C (و بدون کتابخانه اضافی)

دنباله فیبوناچی در پایتون ساده

دنباله فیبوناچی یک مثال کلاسیک است که برای آموزش توسعه نرم افزار استفاده می شود. مجموعه ای از اعداد است که با 0 و 1 شروع می شود. هر عدد بعدی مجموع دو عدد قبلی است. بنابراین، دنباله به این صورت است: 0، 1، 1، 2، 3، 5، 8، 13، 21، 34، …

ما می توانیم فیبوناچی را در پایتون به این ترتیب توسعه دهیم:

import time

# Configure iterations
iterations = 30

# Define fibonacci in native python
def fibonacci(n):
  if n 
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اگر این نسخه خالص پایتون (در ماشین مجازی Google IDX) فیبوناچی را اجرا کنیم، دریافت می کنیم:

  • 10 تکرار: 5.77 میلی ثانیه
  • 30 تکرار: 984.36 میلی ثانیه
  • 50 تکرار: (من باید روند را لغو کنم، زمان زیادی است)

دنباله فیبوناچی در C

ما می توانیم همان دنباله را در C ساده ایجاد کنیم:

#include 

int fibonacci(int n) {
    if (n 
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

کامپایل کتابخانه با GCC:

gcc -o fibonacci.so -shared -fPIC -O2 fibonacci.c
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اکنون، یک کتابخانه باینری بومی داریم که تابع دنباله فیبوناچی در داخل آن است. ما می توانیم این کتابخانه را در داخل یک برنامه پایتون با ctypes جاسازی کنیم (کتابخانه انواع Python C، زیرا خود پایتون در C توسعه یافته است):

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()
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

حال اگر این نسخه را بر روی فیبوناچی اجرا کنیم، دریافت می کنیم:

  • 10 تکرار: 0.54 میلی ثانیه
  • 30 تکرار: 6.92 میلی ثانیه
  • 50 تکرار: 82324.90 میلی ثانیه

بهتر است، نه؟

از موارد برای ادغام Python و C استفاده کنید

ما می توانیم از این نوع ادغام در بسیاری از برنامه ها و سناریوها استفاده کنیم، مانند:

  • در برنامه جنگو ما، سریال‌سازها و deserializers را افزایش دهید
  • سرعت بخشیدن به بخش های حیاتی در یک گردش کار
  • تعاملات سطح پایین با سیستم عامل
  • و غیره

و شما؟ چگونه از این ترفند کوچک در پروژه خود استفاده خواهید کرد؟ من دوست دارم نظرات شما را بشنوم!

درباره لیست

در بین پست های پایتون و داکر، در مورد موضوعات مرتبط دیگر نیز می نویسم (موضوعات همیشه فنی و برنامه نویسی، قول می دهم … با انگشتان دست زده) مانند:

  • معماری نرم افزار
  • محیط های برنامه نویسی
  • سیستم عامل لینوکس
  • و غیره

اگر فناوری، زبان برنامه نویسی یا هر چیز دیگری پیدا کردید، لطفاً به من اطلاع دهید! من همیشه برای یادگیری چیزهای جدید باز هستم!

درباره نویسنده

من آندرس هستم، یک توسعه دهنده نرم افزار تمام پشته مستقر در پالما، در یک سفر شخصی برای بهبود مهارت های برنامه نویسی خود. من همچنین یک نویسنده فانتزی خود منتشر شده با چهار رمان منتشر شده به نام خود هستم. راحت از من هر چیزی بپرسید!

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا