การทำเธรดใน Python: เรียนรู้วิธีการทำงานกับเธรดใน Python



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

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

คำแนะนำต่อไปนี้จะกล่าวถึงในบทความนี้





ให้เราเริ่มต้น

เธรดใน Python

เธรดใน Python คืออะไร?

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



แม้ว่าจะเป็นความรู้สึกที่ยอดเยี่ยมที่ได้ใช้งานสองกระบวนการที่แตกต่างกันในเวลาเดียวกัน แต่เราต้องเข้าใจว่า Python 3 ขึ้นไปเวอร์ชันปัจจุบันมีการเข้ารหัสในลักษณะนี้ซึ่งสามารถเรียกใช้กระบวนการได้ในเวลาใดเวลาหนึ่งเท่านั้น อย่างไรก็ตามหากคุณต้องการสองกระบวนการขึ้นไปพร้อมกันใน CPython คุณต้องเขียนโค้ดบางส่วนของคุณในภาษาอื่นด้วยเช่น C, C ++ และ Java จากนั้นเรียกใช้ผ่านมัลติเธรดใน Python

ข้อดีอย่างหนึ่งที่รู้จักกันดีของเธรดใน Python คือความสามารถในการเพิ่มความชัดเจนในการออกแบบ

ก่อนหน้านั้นเรามีความคิดบางอย่างเกี่ยวกับ Threading ใน Python ให้เราเข้าใจวิธีเริ่มต้นเธรด



เริ่มต้นเธรดใน Python

ตอนนี้คุณคุ้นเคยกับคำจำกัดความของเธรดใน Python แล้วลองมาดูตัวอย่างวิธีสร้างเธรดของคุณเองใน Python ในการสร้างเธรดใน Python ก่อนอื่นคุณต้องอิมพอร์ตไลบรารีเธรดจากนั้นสั่งให้ start () ดังที่แสดงในตัวอย่างด้านล่าง:

นำเข้าบันทึกการนำเข้าเวลานำเข้าเธรด def thread_function (ชื่อ): logging.info ('เธรด% s: เริ่มต้น', ชื่อ) time.sleep (2) logging.info ('เธรด% s: จบ', ชื่อ) ถ้า __name__ == '__main__': format = '% (asctime) s:% (message) s' logging.basicConfig (format = format, level = logging.INFO, datefmt = '% H:% M:% S') logging.info ( 'Main & ampampampnbsp & ampampampnbsp: before create thread') x = threading.Thread (target = thread_function, args = (1,)) logging.info ('Main & ampampampnbsp & ampampampnbsp: before running thread') x.start () logging.info ('Main & ampampampnbsp & ampampampnbsp: รอให้เธรดเสร็จสิ้น ') # x.join () logging.info (' Main & ampampampnbsp & ampampampnbsp: all done ')

เอาต์พุต

เอาต์พุต - เธรดใน Python - Edureka

เมื่อรันเธรดใน Python คุณจะส่งต่อเป็นฟังก์ชันที่มีรายการอาร์กิวเมนต์ที่จำเป็นในการดำเนินการ ในตัวอย่างที่แชร์ข้างต้นคุณกำลังสั่งให้ Python รันเธรด thread_function () และส่งต่อไปยัง 1 เป็นอาร์กิวเมนต์

เมื่อคุณรันโปรแกรมข้างต้นผลลัพธ์จะมีลักษณะดังนี้

java ide ที่ดีที่สุดสำหรับ linux

บทความถัดไปเกี่ยวกับ 'Threading in Python' ให้เราดูว่า daemon thread คืออะไร

Daemon Threads คืออะไร?

ในคำศัพท์ทางเทคนิค daemon สามารถกำหนดให้เป็นกระบวนการที่ทำงานในเบื้องหลังเป็นหลัก อย่างไรก็ตามใน Python เธรด daemon มีความหมายที่เฉพาะเจาะจงมาก ใน Python เธรด daemon จะปิดระบบทันทีที่โปรแกรมออกแม้ว่าในภาษาโปรแกรมอื่นจะยังคงทำงานอยู่เบื้องหลัง หากในบางโปรแกรมเธรดไม่ได้ถูกตั้งโปรแกรมว่าเป็นเดมอนเธรดล่ามจะรอให้เธรดดำเนินการเสร็จสิ้นจากนั้นจึงปิดเฉพาะอินเทอร์พรีเตอร์เท่านั้น

หากต้องการทำความเข้าใจแนวคิดนี้ให้ดีขึ้นลองดูตัวอย่างด้านบน ในบรรทัดสุดท้ายที่สองโปรแกรมจะรอสองสามวินาทีหลังจากเสร็จสิ้นงานทั้งหมด เนื่องจากกำลังรอให้เธรด non-daemonic ดำเนินการเสร็จสิ้นจากนั้นจึงออกจากอินเทอร์เฟซ เมื่อเธรดเสร็จสิ้นการทำงานของโปรแกรมจะออกจากโปรแกรมเท่านั้น

ตอนนี้ให้เราแก้ไขโปรแกรมด้านบนและดูว่าจะเกิดอะไรขึ้นถ้าเราใส่เธรด daemon ในโค้ด

รหัสใหม่: x = threading.Thread (target = thread_function, args = (1,), daemon = True)

เมื่อคุณเรียกใช้โปรแกรมด้านบนโดยมีการปรับเปลี่ยนโปรแกรมจะมีลักษณะดังนี้

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

จาวาสคริปต์ตรวจสอบความยาวของอาร์เรย์

การเข้าร่วมเธรด

ตอนนี้คุณได้เรียนรู้เกี่ยวกับแนวคิดในการสร้างเธรดใน Python พร้อมกับแนวคิดของเธรด daemonic แล้วให้เราค้นพบว่าคุณสามารถเข้าร่วมเธรดใน Python ได้อย่างไร

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

บทความสุดท้ายเกี่ยวกับ 'Threading in Python' จะแสดงหลายเธรดที่ใช้งานได้

การทำงานกับหลายเธรด

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

นำเข้าบันทึกการนำเข้าเวลานำเข้าเธรด def thread_function (ชื่อ): logging.info ('เธรด% s: เริ่มต้น', ชื่อ) time.sleep (2) logging.info ('เธรด% s: จบ', ชื่อ) ถ้า __name__ == '__main__': format = '% (asctime) s:% (message) s' logging.basicConfig (format = format, level = logging.INFO, datefmt = '% H:% M:% S') threads = list ( ) สำหรับดัชนีในช่วง (3): logging.info ('Main & ampampampnbsp & ampampampnbsp: create and start thread% d.', index) x = threading.Thread (target = thread_function, args = (index,)) threads.append (x ) x.start () สำหรับดัชนีเธรดในการแจงนับ (เธรด): logging.info ('Main & ampampampnbsp & ampampampnbsp: ก่อนเข้าร่วม thread% d.', index) thread.join () logging.info ('Main & ampampampnbsp & ampampampnbsp: thread% d เสร็จสิ้น ', ดัชนี)

เอาต์พุต

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

เมื่อคุณเรียกใช้โปรแกรมข้างต้นผลลัพธ์จะเป็นดังนี้

สรุป

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

ฉันหวังว่าคุณจะชอบบทความนี้

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

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