كيفية تشغيل وحدة بايثون الرئيسية مع عرض المخرجات التسلسلية
عند العمل في مشروع يدمج بين برمجة بايثون ومكونات إلكترونية مثل مستشعر TFLUNA Lidar وشاشة عرض من نوع SSD1306، قد تواجه مشكلة توقف البرنامج أو تعليقه عند عرض البيانات. في هذا المقال، سوف نستعرض كيفية الحفاظ على تشغيل وحدة بايثون الرئيسية بينما تخرج المخرجات التسلسلية إلى الشاشة.
ما هو المبدأ الأساسي للحفاظ على وحدة بايثون الرئيسية نشطة؟
عندما تعمل المشاريع التي تتضمن قراءة بيانات من مستشعرات، قد تحتاج إلى تنفيذ عمليات متعددة في وقت واحد. في حالتنا، نحن بحاجة إلى قراءة المسافة باستمرار من مستشعر TFLUNA، وفي نفس الوقت، عرض هذه البيانات على شاشة SSD1306. للتغلب على مشكلة التوقف، يمكننا استخدام الأساليب المتعددة، مثل العاملات (threads) أو معالجة العمليات (multiprocessing).
استخدام العاملات لتحسين الأداء
الكود البرمجي المقدم يستخدم وظيفة لقراءة البيانات من المنفذ التسلسلي. لكن يقوم بتعليق العملية الرئيسية أثناء عرض البيانات. هنا يأتي دور العاملات. باستخدام مكتبة threading
في بايثون، يمكننا إنشاء خيط (thread) جديد يقوم بقراءة البيانات في الخلفية دون التأثير على أداء البرنامج.
import threading
def start_reading_data():
while True:
distance = read_tfluna_data()
print(f'{distance:.2f} m')
term.puts(f'\n\n\t\t{distance:.2f} m')
term.clear()
# تشغيل خيط قراءة البيانات
thread = threading.Thread(target=start_reading_data)
thread.start()
هذا الكود ينشئ خيطاً خاصاً لقراءة البيانات بينما تستمر الوحدة الرئيسية في العمل بسلاسة.
استخدام معالجة العمليات
بدلاً من العاملات، يمكن استخدام مكتبة multiprocessing
، التي تسمح بإنشاء عمليات متعددة. هذا الخيار يسمح بتنفيذ عمليات مستقلة في مساحة ذاكرة خاصة بها، وهو مفيد جداً عند التعامل مع العمليات الأكثر كثافة.
from multiprocessing import Process
def run_sensor():
while True:
distance = read_tfluna_data()
print(f'{distance:.2f} m')
term.puts(f'\n\n\t\t{distance:.2f} m')
term.clear()
if __name__ == "__main__":
process = Process(target=run_sensor)
process.start()
الحفاظ على تشغيل وحدة بايثون الرئيسية بينما تخرج البيانات إلى الشاشة أمر ممكن وضروري في العديد من المشاريع.
تحليل المشكلة وفهم التأخير
التأخير الذي كان يحصل في قراءة البيانات وعرضها يرجع إلى الطريقة التي كان يتم بها كتابة التعليمات البرمجية. عندما كانت وظيفة القراءة تتوقف لتحديث الشاشة، كان يتسبب ذلك في قضاء البرنامج وقتًا أطول مما هو مطلوب، مما يؤدي إلى حالة من الإيقاف المؤقت.
باستخدام الخيوط أو العمليات التي تم توضيحها سابقاً، يمكننا ضمان عدم توقف وحدة بايثون الرئيسية، مما يجعل القراءة والتحديث يحدثان في آن واحد.
خاتمة
إن القدرة على الحفاظ على تشغيل وحدة بايثون الرئيسية أثناء إخراج المخرجات التسلسلية إلى الشاشة هي مهارة مهمة في تطوير البرامج. من خلال استخدام طرق مثل الخيوط أو معالجة العمليات، يمكنك تحسين تدفق البيانات في مشروعك وتقليل التأخير.
يمكن تلخيص الطرق المختلفة للحفاظ على وحدة بايثون الرئيسية المحمولة بين المهام الموازية. هذه الحلول ليست فقط فعالة في حالة استخدام مستشعر TFLUNA مع شاشة SSD1306، بل يمكن تطبيقها على مجموعة واسعة من التطبيقات البرمجية الأخرى.
من المهم دائماً تجربة هذه الحلول وتخصيصها بناءً على احتياجات المشروع لتحسين الأداء والسلاسة.