ကျွန်တေ်ာတို့ Python Basic ကိုလေ့လာပြီဆို အသုံးဝင်တယ့် Data Structure တွေဖြစ်တဲ့ Stacks နဲ့ Queues တို့ကိုနားလည်ထားသင့်ပါတယ်။ဒီနေ့ ပို့စ်မှာတော့ ကျွန်တော်တို့ stacks and queues တွေရဲ့ အလုပ်လုပ်ပုံနဲ့ ဘယ်လိုတွေ တည်ဆောက်လို့ရတယ်ကိုလေ့လာသွားရမှာဖြစ်ပါတယ်။
Stacks
Stacks တွေက (LIFOs) လို့ခေါ်တဲ့ Last-in,First-out ပုံစံနဲ့ သွားကြပါတယ်။ဥပမာအားဖြင့်ကြည့်မယ်ဆို Python list တွေကိုကြည့်မယ်ဆိုရင်နားလည်နိုင်ပါတယ်။
>>> st = []
>>> st.append('a')
>>> st.append('b')
>>> st.append('c')
>>> st
['a', 'b', 'c']
>>> st.pop()
'c'
>>> st.pop()
'b'
>>> st
['a']
>>>
ကျွန်တော်တို့ Last-in,first-out ဆိုတဲ့ တိုင်း နောက်ဆုံးမှထည့်တယ့်ကောင်က အရင်ဦးဆုံးထွက်လာတာကိုတွေ့ရမှာပါ။
နောက်တစ်နည်းကတော့ collections.deque ကိုသုံးတာပါ။ဒါကတော့ ပိုလဲမြန်တယ် မှန်တဲ့နည်းလဲဆိုရမှာပါ။Deque တွေက stacks အနေနဲ့ကော Queues အနေနဲ့ကော အလုပ်လုပ်နိုင်ကြပါတယ်။ကျွန်တော်တို့အခု Stacks ပုံစံကိုကြည့်ရအောင်
>>> from collections import deque
>>> s = deque()
>>> s.append('a')
>>> s.append('b')
>>> s.append('c')
>>> s.pop()
'c'
>>>
ကျွန်တော်တို့အပေါ်ကတိုင်း deque objectတည်ဆောက်ပြီး append method ကိုသုံးကာ ထည့်လိုက်ပါတယ်။ထုံးစံတိုင်း နောက်ဆုံးက ကောင်ရှေ့ဆုံးကထွက်လာပါတယ်။
နောက်တစ်မျိုးကတော့ LifoQueue ကိုသုံးတာပါ။ဒါကတော့ ကျွန်တော်တို့ thread တွေသုံးရေးတာမျိုး parallel ရေးတာမျိုးမှာ တစ်ခုနဲ့တစ်ခုဆက်သွယ်ပြီး အလုပ်လုပ်ဖို့အဆင်ပြေဆုံးပါ။
>>> from queue import LifoQueue
>>> s = LifoQueue()
>>> s.put('a')
>>> s.put('b')
>>> s.put('c')
>>> s.get()
'c'
>>> s.get()
'b'
>>>
သူတို့က ထည့်တဲ့အခါမှာ put ကိုသုံးပြီးလိုချင်ရင်တော့ get ကိုသုံးပါတယ်။ဒါလေးပဲကွာခြားတာပါ။
Queues
Queues တွေကတော့ FIFOs လို့ခေါ်တဲ့ First-in,First-Out ပုံစံမျိုးနဲ့သွားပါတယ်။အရမ်းမကွာခြားပါဘူး List တွေနဲ့ကြည့်မယ်ဆို
>>> qu = []
>>> qu.append('a')
>>> qu.append('b')
>>> qu.append('c')
>>> qu.pop(0)
'a'
>>> qu.pop(0)
'b'
>>> qu.pop(0)
'c'
>>>
ကျွန်တော်တို့ ရှေ့ကထည့်တဲ့ကောင် ရှေ့ဆုံးက ထွက်လာတာတွေ့ရမှာပါ။ဒါလေးပါပဲ။
မှတ်ချက်။ ။မရေးသင့်တဲ့ပုံစံပါ နှေးပါတယ်အရမ်း။
အောက်ကတော့collections.deque ကိုသုံးရေးတာပါ။ကျွန်တော်ပြောခဲ့ပါတယ် stack ကော queue အနေနဲ့သုံးလို့ရပြီး မြန်တယ်လို့ပြောခဲ့ပါတယ်။
>>> from collections import deque
>>> s = deque()
>>> s.append('a')
>>> s.append('b')
>>> s.append('c')
>>> s.popleft()
'a'
>>>
ဒီနည်းကတော့ queue ကိုသုံးပြီးရေးတာပါ။
>>> from queue import Queue
>>> qu = Queue()
>>> qu.put('a')
>>> qu.put('b')
>>> qu.put('c')
>>> qu.get()
'a'
>>>
ကျွန်တော်တို့ ဒီနောက်ဆုံးနည်းသည် Thread Communication မှာအသုံးအရမ်းဝင်ပါတယ်။ဥပမာ မိတ်ဆွေရဲ့ web crawler မှာ thread တစ်ခုက url list တွေကိုစုပေးပြီး နောက် thread တစ်ခုက အဲ့urlကို လိုက်scrape လုပ်တဲ့အခါမျိုး တစ်ခြား exampleတွေလဲအများကြီးပါ အဲ့လိုတွေမှာအသုံးဝင်ပါတယ်။
အားလုံးကိုကျေးဇူးတင်ပါတယ်။