Mutithreading ใน Python คืออะไรและจะบรรลุได้อย่างไร



เรียนรู้ว่าการทำงานหลายอย่างพร้อมกันใน python คืออะไร นอกจากนี้ยังอธิบายถึงวิธีการสร้างเธรดแบบมัลติเธรดโดยไม่ต้องสร้างคลาสโดยการขยายคลาสเธรดและไม่ต้องขยาย

เวลาเป็นปัจจัยที่สำคัญที่สุดในชีวิต เนื่องจากความสำคัญของมันโลกของการเขียนโปรแกรมจึงมีกลเม็ดและเทคนิคต่างๆที่ช่วยให้คุณลดการใช้เวลาลงได้อย่างมากซึ่งจะช่วยเพิ่มประสิทธิภาพ แนวทางหนึ่งคือ Multithreading ใน Python ซึ่งเป็นหนึ่งในแนวคิดที่สำคัญที่สุดภายใต้ .

นี่คือบทสรุปโดยย่อของสาขาวิชาทั้งหมดที่กล่าวถึงในบทความนี้:





วิธีสร้างไฟล์ logger ใน java

คืออะไร มัลติทาสกิ้ง ใน Python?
เธรดคืออะไร?
Multithreading ใน python คืออะไร?
เมื่อใดควรใช้มัลติเธรดใน Python
จะบรรลุ Multithreading ใน Python ได้อย่างไร?
จะสร้างเธรดใน Python ได้อย่างไร?

ข้อดีของการใช้มัลติเธรดใน Python



เริ่มต้นด้วยการเริ่มต้นให้เราพยายามทำความเข้าใจการทำงานหลายอย่างพร้อมกันก่อนที่เราจะเริ่มเรียนรู้เกี่ยวกับมัลติเธรดใน Python

Multitasking ใน Python คืออะไร?

โดยทั่วไปแล้วการทำงานหลายอย่างพร้อมกันคือความสามารถในการทำงานหลายอย่างพร้อมกัน ในแง่เทคนิคการทำงานหลายอย่างพร้อมกันหมายถึงความสามารถของระบบปฏิบัติการในการทำงานต่าง ๆ ในเวลาเดียวกัน ตัวอย่างเช่น คุณกำลังดาวน์โหลดบางอย่างบนพีซีของคุณเช่นเดียวกับการฟังเพลงและเล่นเกมไปพร้อม ๆ กัน ฯลฯ งานทั้งหมดนี้ดำเนินการโดยระบบปฏิบัติการเดียวกันและในการซิงค์ นี่ไม่ใช่แค่การทำงานหลายอย่างพร้อมกันซึ่งไม่เพียง แต่ช่วยให้คุณประหยัดเวลา แต่ยังช่วยเพิ่มผลผลิตอีกด้วย

การทำงานหลายอย่างพร้อมกันในระบบปฏิบัติการมีสองประเภท:



  • ตามกระบวนการ
  • ตามเธรด

ในบทความนี้คุณจะได้เรียนรู้เกี่ยวกับ ตามเธรด มัลติทาสกิ้งหรือ มัลติเธรด .

เธรดคืออะไร?

เธรดมัลติเธรดใน python-edurekaเธรดเป็นไฟล์ อิสระ ขั้นตอนการดำเนินการ กระบวนการเดียวสามารถประกอบด้วยหลายเธรด แต่ละเธรดในโปรแกรมทำงานเฉพาะ ตัวอย่างเช่น, เมื่อคุณเล่นเกมพูดว่า FIFA บนพีซีของคุณเกมโดยรวมเป็นกระบวนการเดียว , แต่ประกอบด้วยเธรดหลายเธรดที่รับผิดชอบในการเล่นเพลงรับอินพุตจากผู้ใช้เรียกใช้คู่ต่อสู้พร้อมกัน ฯลฯ ทั้งหมดนี้เป็นเธรดแยกต่างหากที่รับผิดชอบในการทำงานที่แตกต่างกันเหล่านี้ในโปรแกรมเดียวกัน

ทุกกระบวนการมีเธรดเดียวที่ทำงานอยู่เสมอ นี่คือกระทู้หลัก เธรดหลักนี้สร้างอ็อบเจ็กต์เธรดลูก เธรดย่อยยังเริ่มต้นโดยเธรดหลัก ฉันจะแสดงให้คุณเห็นเพิ่มเติมในบทความนี้เกี่ยวกับวิธีตรวจสอบเธรดที่กำลังทำงานอยู่ในปัจจุบัน

ด้วยเหตุนี้ฉันหวังว่าคุณจะเข้าใจอย่างชัดเจนว่าอะไรคือเธรด ไปดูกันว่า Multithreading ใน Python คืออะไร

เมื่อใดควรใช้ Multithreading ใน Python

มัลติเธรดมีประโยชน์มากในการประหยัดเวลาและปรับปรุงประสิทธิภาพ แต่ไม่สามารถใช้ได้ทุกที่
ในตัวอย่าง FIFA ก่อนหน้านี้เธรดเพลงไม่ขึ้นอยู่กับเธรดที่รับอินพุตของคุณและเธรดที่รับอินพุตของคุณจะไม่ขึ้นกับเธรดที่รันคู่ต่อสู้ของคุณ เธรดเหล่านี้ทำงานอย่างอิสระเนื่องจากไม่ขึ้นต่อกัน

ดังนั้นจึงสามารถใช้มัลติเธรดได้ก็ต่อเมื่อไม่มีการอ้างอิงระหว่างเธรดแต่ละเธรด

บทความนี้แสดงเพิ่มเติมว่าคุณสามารถบรรลุ Multithreading ใน Python ได้อย่างไร

จะบรรลุ Multithreading ใน Python ได้อย่างไร?

Multithreading ใน Python สามารถทำได้โดยการนำเข้าไฟล์ เธรด โมดูล.

ก่อนนำเข้าโมดูลนี้คุณจะต้องติดตั้งโมดูลนี้ ในการติดตั้งสิ่งนี้บนสภาพแวดล้อมอนาคอนดาของคุณให้ดำเนินการคำสั่งต่อไปนี้บนพรอมต์อนาคอนดาของคุณ:

conda ติดตั้ง -c conda-forge tbb

หลังจากติดตั้งสำเร็จคุณสามารถใช้คำสั่งใด ๆ ต่อไปนี้เพื่อนำเข้าโมดูลเธรด:

นำเข้าเธรดจากการนำเข้าเธรด *

เมื่อคุณติดตั้งโมดูลเธรดแล้วให้เราก้าวไปข้างหน้าและทำ Multithreading ใน Python

จะสร้างเธรดใน Python ได้อย่างไร?


เธรดใน Python สามารถสร้างได้สามวิธี:

  1. โดยไม่ต้องสร้างคลาส
  2. โดยการขยายคลาสเธรด
  3. โดยไม่ต้องขยายคลาสเธรด

โดยไม่ต้องสร้างคลาส

การทำมัลติเธรดใน Python สามารถทำได้โดยไม่ต้องสร้างคลาสเช่นกัน นี่คือตัวอย่างเพื่อแสดงให้เห็นถึงสิ่งเดียวกัน:

ตัวอย่าง:

จาก threading import * print (current_thread (). getName ()) def mt (): print ('Child Thread') child = Thread (target = mt) child.start () print ('Executing thread name:', current_thread ( ) .getName ())

เอาท์พุต:

MainThread Child Thread การดำเนินการชื่อเธรด: MainThread

ผลลัพธ์ข้างต้นแสดงให้เห็นว่าเธรดแรกที่มีอยู่คือเธรดหลัก จากนั้นเธรดหลักนี้จะสร้างเธรดลูกที่เรียกใช้ฟังก์ชันจากนั้นคำสั่งพิมพ์สุดท้ายจะถูกเรียกใช้อีกครั้งโดยเธรดหลัก

ตอนนี้ให้เราไปข้างหน้าและดูวิธีการทำ Multithreading ใน python โดยการขยายคลาส Thread

โดยการขยายคลาสเธรด:

เมื่อคลาสลูกถูกสร้างขึ้นโดยการขยายคลาสเธรดคลาสลูกจะแสดงว่าเธรดใหม่กำลังดำเนินการบางอย่าง เมื่อขยายคลาส Thread คลาสลูกสามารถแทนที่เมธอดได้เพียงสองวิธีเท่านั้นคือเมธอด __init __ () และเมธอด run () ไม่มีวิธีอื่นใดที่สามารถแทนที่ได้นอกจากสองวิธีนี้

นี่คือตัวอย่างวิธีการขยายคลาสเธรดเพื่อสร้างเธรด:

ตัวอย่าง:

นำเข้าเธรดคลาสเวลานำเข้ามายา (threading.Thread): def run (self): สำหรับ x ใน range (7): print ('Hi from child') a = mytread () a.start () a.join () print ('ลาก่อน', current_thread (). getName ())

เอาท์พุต:
สวัสดีจากเด็ก
สวัสดีจากเด็ก
สวัสดีจากเด็ก
สวัสดีจากเด็ก
สวัสดีจากเด็ก
สวัสดีจากเด็ก
สวัสดีจากเด็ก
ลาก่อนจาก MainThread

ตัวอย่างข้างต้นแสดงให้เห็นว่าคลาส myclass กำลังสืบทอดคลาสเธรดและคลาสย่อยเช่น myclass กำลังแทนที่เมธอด run โดยค่าเริ่มต้นพารามิเตอร์แรกของฟังก์ชันคลาสใด ๆ จะต้องเป็นตัวเองซึ่งเป็นตัวชี้ไปยังวัตถุปัจจุบัน ผลลัพธ์แสดงให้เห็นว่าเธรดชายด์รันเมธอด run () และเธรดหลักรอให้การเรียกใช้ childs เสร็จสมบูรณ์ นี่เป็นเพราะฟังก์ชัน join () ซึ่งทำให้เธรดหลักรอให้เด็กทำงานเสร็จ

วิธีการสร้างเธรดนี้เป็นวิธีที่ต้องการมากที่สุดเนื่องจากเป็นวิธีมาตรฐาน แต่ในกรณีที่คุณต้องการสร้างเธรดโดยไม่สืบทอดหรือขยายคลาสเธรดคุณสามารถทำได้ในลักษณะต่อไปนี้

โดยไม่ต้องขยายคลาสเธรด

ในการสร้างเธรดโดยไม่ต้องขยายคลาสเธรดคุณสามารถทำได้ดังนี้:
ตัวอย่าง:

จาก threading import * class ex: def myfunc (self): #self จำเป็นเป็นพารามิเตอร์แรกใน class func สำหรับ x ในช่วง (7): print ('Child') myobj = ex () thread1 = Thread (target = myobj. myfunc) thread1.start () thread1.join () พิมพ์ ('เสร็จสิ้น')

เอาท์พุต:

เด็ก
เด็ก
เด็ก
เด็ก
เด็ก
เด็ก
เด็ก
เสร็จแล้ว

เธรดลูกเรียกใช้งาน myfunc หลังจากนั้นเธรดหลักจะเรียกใช้คำสั่งพิมพ์ล่าสุด

ข้อดีของการใช้เธรด

มัลติเธรดมีข้อดีหลายประการดังต่อไปนี้:

  • การใช้ทรัพยากรที่ดีขึ้น
  • ลดความซับซ้อนของรหัส
  • อนุญาตให้เกิดงานต่างๆพร้อมกันและแบบขนาน
  • ลดการใช้เวลาหรือเวลาตอบสนองซึ่งจะช่วยเพิ่มประสิทธิภาพ

นี่คือตัวอย่างเพื่อตรวจสอบว่าโค้ดใช้เวลานานแค่ไหนในการรันและไม่มีมัลติเธรดใน python:

 ตัวอย่าง: 
เวลานำเข้า def sqr (n): สำหรับ x ใน n: time.sleep (1) x% 2 def cube (n): สำหรับ x ใน n: time.sleep (1) x% 3 n = [1,2,3 , 4,5,6,7,8] s = time.time () sqr (n) ลูกบาศก์ (n) e = time.time () พิมพ์ (es)

เอาท์พุต:

16.042309284210205

ข้างต้นคือเวลาเอาต์พุตที่ใช้ในการรันโปรแกรมโดยไม่ต้องใช้เธรด ตอนนี้ให้เราใช้เธรดและดูว่าเกิดอะไรขึ้นกับโปรแกรมเดียวกัน:

ตัวอย่าง:

นำเข้าเธรดจากการนำเข้าเธรด * เวลานำเข้า def sqr (n): สำหรับ x ใน n: time.sleep (1) print ('ส่วนที่เหลือหลังจากหารด้วย 2', x% 2) def cube (n): สำหรับ x ใน n: time.sleep (1) พิมพ์ ('ส่วนที่เหลือหลังจากหารด้วย 3', x% 3) n = [1,2,3,4,5,6,7,8] start = time.time () t1 = Thread ( target = sqr, args = (n,)) t2 = Thread (target = cube, args = (n,)) t1.start () time.sleep (1) t2.start () t1.join () t2.join () end = time.time () พิมพ์ (end-start)
เอาท์พุต: 9.040220737457275

ผลลัพธ์ข้างต้นแสดงให้เห็นอย่างชัดเจนว่าเวลาที่ใช้เมื่อเราใช้เธรดนั้นน้อยกว่ามากเมื่อเทียบกับเวลาที่โปรแกรมเดียวกันดำเนินการโดยไม่ใช้เธรด

ฉันหวังว่าคุณจะเข้าใจแนวคิดที่ครอบคลุมในบทความนี้ที่เกี่ยวข้องกับ Multithreading ใน Python อย่าลืมฝึกฝนให้มากที่สุดเท่าที่จะทำได้เพราะนี่เป็นหนึ่งในแนวคิดที่สำคัญที่สุดที่ใช้ในการเขียนโปรแกรม

มีคำถามสำหรับเรา? โปรดระบุไว้ในส่วนความคิดเห็นของบล็อก“ Multithreading in Python” และเรา จะ ติดต่อกลับโดยเร็วที่สุด

ฟังก์ชันการจัดเรียง c ++

หากต้องการรับความรู้เชิงลึกเกี่ยวกับ Python พร้อมกับแอพพลิเคชั่นต่างๆคุณสามารถลงทะเบียนเพื่อถ่ายทอดสด ด้วยการสนับสนุนตลอด 24 ชั่วโมงทุกวันและการเข้าถึงตลอดชีวิต