آموزش Queue در پایتون؛ چطور با Queue در پایتون چند وظیفه را به ترتیب اجرا کنیم؟
فهرست مطالب این نوشته
Toggleساختار دادهای Queue یا «صف» اساس سیستمهایی مثل مدیریت تسکها در سیستمعاملها، پردازش درخواستهای سرور و الگوریتمهای جستجو است. اگر تازه وارد دنیای برنامهنویسی هستید و میخواهید خیلی ساده و کاربردی با این مفهوم آشنا شوید، همراه ما باشید. اگر تازه وارد دنیای برنامهنویسی هستید و میخواهید خیلی ساده و کاربردی با ساختار دادهای Queue آشنا شوید، این مطلب در قالب آموزش اسکرچ جونیور از آکادمی چابک برای شما آماده شده است.
تخفیفهای شگفتانگیز جشنواره آکادمی چابک
تخفیف بگیر و ثبت نام کن!
مفهوم صف Queue در پایتون
صف (Queue) یک ساختار دادهای خطی است که بر اساس قانون «اول وارد، اول خارج» (FIFO) عمل میکند. یعنی عنصری که ابتدا وارد صف میشود، زودتر از بقیه هم خارج خواهد شد.
ویژگیهای اصلی صفها:
- افزودن عنصر (Enqueue): اضافه کردن داده به انتهای صف.
- حذف عنصر (Dequeue): حذف اولین داده از ابتدای صف.
- مشاهده عنصر اول (Peek): دیدن عنصر جلویی بدون حذف.
- بررسی خالی بودن صف (IsEmpty): چک کردن وضعیت صف.
این ساختار در پایتون بهشکلهای مختلف قابل پیادهسازی است که در ادامه همه را بررسی میکنیم.
همین حالا ثبتنام کنید!
Queue در پایتون چیست و چرا باید از آن استفاده کنیم؟
در پایتون صفها بهصورتهای مختلف قابل پیادهسازی هستند: از سادهترین روش با list گرفته تا روشهای بهینهتر مثل collections.deque و queue.Queue. برای اینکه بتوانید بهترین گزینه را انتخاب کنید، باید ابتدا شرایط پروژهتان را بسنجید. برای مثال آیا برنامه چندنخی است؟ آیا حجم داده زیاد است؟
در ادامه یک مثال Queue در پایتون برایتان بررسی کردهایم تا این مفهوم را بهتر درک کنید و ببینید چگونه میتوان وظایف را به ترتیب و بدون تداخل مدیریت کرد.
فرض کنید یک وبسایت فروشگاهی دارید و میخواهید درخواستهای خرید کاربران را به ترتیب دریافت و پردازش کنید. با استفاده از deque میتوانید به راحتی این کار را انجام دهید:
from collections import deque
# ایجاد صف برای درخواستها
order_queue = deque()
# اضافه کردن درخواستها به صف
order_queue.append(“Order #1”)
order_queue.append(“Order #2”)
order_queue.append(“Order #3”)
# پردازش درخواستها به ترتیب
while order_queue:
current_order = order_queue.popleft()
print(f”Processing {current_order}”)
انواع صفها در پایتون
قبل از اینکه نحوهی پیادهسازی صفها را ببینیم، بد نیست با انواع آنها آشنا شویم تا بدانید هرکدام دقیقاً برای چه سناریویی طراحی شدهاند. جدول زیر خلاصهای از رایجترین نوع صفها در پایتون است:
| نوع صف | ویژگی | ماژول پیشنهادی |
|---|---|---|
| صف ساده (FIFO) | معمولترین نوع، بر اساس ورود و خروج | deque یا queue.Queue |
| صف دوطرفه (Deque) | اضافه و حذف از هر دو طرف | collections.deque |
| صف اولویت (Priority Queue) | پردازش بر اساس اولویت | queue.PriorityQueue یا heapq |
| پشته (Stack – LIFO) | آخرین ورودی، اولین خروجی | list یا deque |
چطور با Queue در پایتون چند وظیفه را به ترتیب و بدون تداخل اجرا کنیم؟
برای پیاده سازی صف Queue در پایتون، میتوانید یکی از سه روش زیر را انتخاب کنید:
۱. استفاده از لیست ساده
اگر تازه میخواهید مفهوم صف را درک کنید، پیادهسازی با list بهترین نقطهی شروع است.
class ListQueue:
def __init__(self):
self.queue = []
def enqueue(self, item):
self.queue.append(item)
def dequeue(self):
if not self.queue:
raise IndexError(“Queue is empty”)
return self.queue.pop(0)
عیب این روش در سرعت است، چون عملیات pop(0) باعث جابهجایی تمام عناصر دیگر میشود.

۲. روش Deque؛ از Deque چگونه میشود استفاده کرد؟
در بیشتر برنامهها، بهترین انتخاب برای صفهای ساده، استفاده از collections.deque است.
from collections import deque
q = deque()
q.append(‘task1’)
q.append(‘task2’)
print(q.popleft()) # خروجی: task1
۳. روش queue.Queue؛ چطور یک صف thread-safe با queue.Queue در پایتون بسازیم؟
وقتی با چند Thread کار میکنید (مثلاً در سیستمهایی که چند کار را همزمان انجام میدهند)، نیاز به صفی دارید که دسترسی همزمان باعث خرابی داده نشود. در این موقعیت از کلاس queue.Queue استفاده کنید.
from queue import Queue
q = Queue()
q.put(“Job 1”)
q.put(“Job 2”)
print(q.get()) # خروجی: Job 1
این ساختار Thread-safe است و برای کارهای همزمان عالی عمل میکند. این ساختار Thread-safe است و برای کارهای همزمان عالی عمل میکند، و در دورههای آموزش شبکه عصبی در پایتون نیز میتوان از مفاهیم مشابه برای مدیریت دادهها استفاده کرد
کاربرد Queue در پروژه پایتون
Queue کاربردهای مختلفی در پروژههای پایتون دارد که در این بخش چند مورد آنها را مرور میکنیم:
- مدیریت تسکها در سیستمهای چندوظیفهای
- پردازش درخواستهای وبسرور
- پیادهسازی الگوریتم جستجوی عرضی (BFS)
- مدیریت پیامها در سیستمهای توزیعشده
- صف انتظار در اپلیکیشنهای بلادرنگ مثل چت آنلاین
برای ساخت صفی ایمن در محیطهای چندنخی، فقط کافی است از ماژول داخلی queue استفاده کنید. این صف بهصورت خودکار بین Threadها هماهنگی ایجاد میکند و از قفل (Lock) داخلی برای جلوگیری از تداخل استفاده میکند. برای ساخت صف ایمن در چندنخی، از ماژول queue استفاده کنید؛ این روش در آموزش برنامه نویسی پایتون با گوشی هم کاربرد دارد
تفاوت collections.deque و queue.Queue در پایتون چیست؟
در آخر، نگاهی میاندازیم به تفاوتهای دو مورد از پرکاربردترین روشهای پیادهسازی صف در پایتون تا راحتتر بتوانید انتخاب کنید:
| ویژگی | deque | queue.Queue |
|---|---|---|
| سرعت | بسیار بالا در اجرای تکی | کمی کندتر بهخاطر مدیریت قفلها |
| پشتیبانی از چندنخی | ندارد | دارد (Thread-safe) |
| استفاده معمول | الگوریتمها، ساختارهای داده ساده | برنامههای همزمان و چندتردی |
| ماژول | collections | queue |
جمعبندی
حالا که میتوانید از Queue در پایتون استفاده کنید، بهتر است یک پروژهی کوچک مثل مدیریت تسکهای روزانه بسازید و با دستورات enqueue() و dequeue() یک صف ساده را پیادهسازی کنید تا ببینید چقدر مفهوم را دقیق درک کردهاید.
اگر میخواهید عمیقتر وارد دنیای پایتون شوید و مهارتهای خود را حرفهایتر کنید، دورههای آموزشی آکادمی چابک در سطوح مقدماتی، متوسط و پیشرفته، شما را در مسیر تبدیل شدن به یک متخصص واقعی همراهی میکنند.
برای مشاهدهی سرفصلها و اطلاع از تخفیفهای دورهها، به صفحهی محصولات ما سر بزنید.
منبع:


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