آموزش رزبری پای رزبری پای میکروپایتون Micropython

آموزش رزبری پای پیکو با میکروپایتون بخش یازدهم: ایجاد ترد Thread

getting-started-with-raspberry-pi-pico-micropython-part-eleven-thread-digisaprk
نوشته شده توسط پریسا پوربلورچیان

اینکه ترد چیست و چرا در میکروپایتون از آن استفاده می‌کنیم، برمیگردد به دومین کارگاه آنلاین میکروپایتون که با تیمم به دنبال آخرین و به روز ترین کلاس ها برای یادگیری بودیم. اینکه آیا ترد Thread در میکروپایتون هم جایی دارد؟ در این آموزش به معرفی ترد Thread و روش استفاده از آن در برد رزبری پای پیکو با میکروپایتون میپردازیم. در ادامه آموزش ایجاد ترد Thread با مرجع تخصصی میکروپایتون به زبان فارسی، دیجی اسپارک همراه باشید.

آموزش برد پیکو pico بخش یازدهم ایجاد ترد Thread - دیجی اسپارک

 


ترد Thread


ما در طول یک کار چندین پروسه داریم که هر پروسه شامل اطلاعات و دیتا مربوط به برنامه ی در حال اجرا را دارد. هر پروسه ممکن است از چندین پروسه زیرلایه تر تشکیل شده باشد که یک سری تسک و وظایف را بایستی انجام دهند. حال تصور کنید پردازشگر بخواهد تمامی این پروسه ها را همزمان با یکدیگر اجرا کند! چه اتفاقی خواهد افتاد؟ برای اینکار بایستی از مفهوم Thread استفاده کنیم. ترد Thread در حقیقت یک بخش از برنامه است که CPU برنامه ها را از داخل ترد Thread تقسیم بندی کرده و در زمان های مختلف زمانی را به هر Thread اختصاص میدهد تا حالت همزمانی اجرای برنامه ها به وجود بیاید. پس زمانی که بخواهیم چندین تسک را به صورت همزمان انجام دهیم باید از قابلیت ترد Thread استفاده کنیم. اما در گوشه ی ذهن داشته باشید که این عملیات واقعا همزمان نیستند. اما CPU اینقدر زمان بندی را سریع بین تردهای مختلف انجام میدهد که به نظر این هم زمانی جلوه می‌کند.

اما CPU در پشت صحنه اجرای منظم و همزمان تردها را مدیریت می‌کند و به هر ترد thread یک زمان میدهد تا در طول آن زمان ترد تسک مورد نظر را اجرا کند. هنگامی که زمان اختصاص داده شده به ترد thread به پایان برسد، CPU ترد دیگری را اجرا می‌کند تا مجدد به همان Thread برسد و دستوراتش را اجرا کند. مهمترین کاری که تردها انجام میدهند این است که اگر پردازش های سنگین داشته باشیم، میتوانیم پردازش ها را در یک ترد اجرا کنیم و از فریز شدن و قفل شدن برنامه جلوگیری کنیم. در صورت استفاده از thread میتوانیم از هر دو هسته رزبری پای پیکو استفاده کنیم. در پایتون این قابلیت را داریم که یک یا چندین کار به صورت همزمان اجرا شوند. برای اینکار از ماژول _thread استفاده می‌شود. در زیر روش فراخوانی ترد آموزش داده شده است. بررسی کنید.

import _thread
import time


def th_func(delay, id):
    while True:
        time.sleep(delay)
        print('Running thread %d' % id)


for i in range(2):
    _thread.start_new_thread(th_func, (i + 1, i))

متد ترد thread

 

 


ترد thread در رزبری پای پیکو


از نکات قابل توجه در برد رزبری پای پیکو دارا بودن دو هسته Core است. به این معنی که میتوانید به راحتی تسک های چند رشته ای multithreaded را به کمک ترد پیاده سازی کنید. اما بزرگترین چالش اینجاست که رزبری پای پیکو فاقد Operating system سیستم عامل است که بتواند چرخه های CPU را مدیریت کند به همین دلیل هر هسته فقط یک ترد را قبول می‌کند.

import machine
import utime
import _thread


internal_led = machine.Pin(25, machine.Pin.OUT)


def sec_thread():
    while True:
        print("task one")
        utime.sleep(1)


_thread.start_new_thread(sec_thread, ())


while True:
    internal_led.toggle()
    utime.sleep(0.25)
در صورت استفاده از Thread دو عمل در برنامه به صورت همزمان اجرا می‌شود. یک ترد با نام sec_thread ایجاد شده است که یک پیامی را هر ثانیه یک بار چاپ می‌کند. سپس ال ای دی داخلی پیکو به صورت تاگل جداگانه عمل می‌کند و هر دو تسک به درستی و بدون ایجاد تداخل در برنامه اجرا می‌شود.
ایجاد ترد Thread میکروپایتون با رزبری پیکو pico - دیجی اسپارک

 


مثال دوم برای ایجاد ترد Thread


در مثال دوم یک تسک برای ال ای دی در نظر گرفته شده است که با هر بار فعال شدن، ال ای دی ۱۰ بار به مدت  ۰٫۱ ثانیه چشمک زن شده و پس از پایان پیغام Endtask را نمایش میدهد.

 


مثال سوم برای ایجاد ترد Thread


در مثال سوم عملکرد thread به این صورت است که یکی از هسته ها هر ثانیه یک عدد زوج را چاپ می‌کند و هسته دوم هر دو ثانیه یک عدد فرد را چاپ می‌کند.

from time import sleep
import _thread

def core0_thread():
counter = 0
while True:
print(counter)
counter += 2
sleep(1)

def core1_thread():
counter = 1
while True:
print(counter)
counter += 2
sleep(2)

second_thread = _thread.start_new_thread(core1_thread, ())

core0_thread()

 

مثال سوم در ایجاد ترد Thread رزبری پیکو - دیجی اسپارک

 

بخش یازدهم آموزش رزبری پیکو pico ایجاد ترد Thread - دیجی اسپارک

 


وسایل مورد نیاز


رزبری پای پیکو Raspberry Pi PICO

 


جمع بندی لیدی پای


میکروپایتون به نسبت زبان جدیدی است و اگر بخواهیم عمیق تر به لایه های آن نفوذ کنیم نیاز به تمرین و صبوری دارد. بسیاری از مفاهیم جدید است و تماما وابسته به کلاس ها و متدها است تا بتوانیم به درستی از آن ها استفاده کنیم. در این آموزش به معرفی thread و مفهوم آن در Micropython با حل مثال پرداختیم که قطعا لازم و کافی نیست و بایستی ارتقا داده شود. رزبری پای پیکو دو هسته ای است و حالا میتوانیم با یادگیری ترد thread برای هر هسته یک تسک جدا تعریف کنیم که بدون دخالت در کارهای یکدیگر هر تسک به درستی اجرا شود و تاثیری در عملکرد یکدیگر نداشته باشند.

 

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

پریسا پوربلورچیان

تولید کننده محتوا / کارشناس IOT

زندگی یعنی پژوهش و فهمیدن چیزی جدید

تلاشم بر این است تجربیاتم در زمینه IOT‌ را به بهترین شکل با شما در میان بگذارم.

تبادل نظر و رفع عیب با ثبت دیدگاه

۴ دیدگاه

  • بسیار مبحث سنگین و پیچیده ای هست از اینکه در دیجی اسپارک به این تاپیک پرداخته شده است، بی نهایت ممنونم

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