ฉันสับสนเล็กน้อยว่ามัลติเธรดทำงานใน Python ได้หรือไม่
ฉันรู้ว่ามีคำถามมากมายเกี่ยวกับเรื่องนี้และฉันได้อ่านคำถามมากมาย แต่ฉันก็ยังสับสน ฉันรู้จากประสบการณ์ของตัวเองและเคยเห็นคนอื่น ๆ โพสต์คำตอบและตัวอย่างของพวกเขาเองที่ StackOverflow ว่าการทำมัลติเธรดเป็นไปได้ใน Python เหตุใดทุกคนจึงบอกว่า Python ถูกล็อกโดย GIL และเธรดเดียวเท่านั้นที่สามารถทำงานได้ในแต่ละครั้ง? มันทำงานได้อย่างชัดเจน หรือมีความแตกต่างบางอย่างที่ฉันไม่ได้มาที่นี่?
ผู้โพสต์ / ผู้ตอบแบบสอบถามหลายคนมักพูดถึงว่าเธรดมี จำกัด เนื่องจากไม่ได้ใช้ประโยชน์จากหลายคอร์ แต่ฉันจะบอกว่ามันยังมีประโยชน์เพราะทำงานไปพร้อม ๆ กันจึงทำให้ปริมาณงานรวมเสร็จเร็วขึ้น ฉันหมายความว่าทำไมถึงมีโมดูลเธรด Python เป็นอย่างอื่น?
อัปเดต:
ขอบคุณสำหรับคำตอบทั้งหมดจนถึงตอนนี้ วิธีที่ฉันเข้าใจก็คือการทำงานแบบมัลติเธรดจะทำงานแบบขนานสำหรับงาน IO บางงานเท่านั้น แต่สามารถรันได้ทีละงานสำหรับงานหลักที่เชื่อมโยงกับ CPU เท่านั้น
ฉันไม่แน่ใจว่าสิ่งนี้มีความหมายอย่างไรสำหรับฉันในแง่ที่ใช้ได้จริงดังนั้นฉันจะยกตัวอย่างประเภทของงานที่ฉันต้องการทำมัลติเธรด ตัวอย่างเช่นสมมติว่าฉันต้องการวนซ้ำรายการสตริงที่ยาวมากและฉันต้องการดำเนินการกับสตริงพื้นฐานในแต่ละรายการ ถ้าฉันแยกรายการออกให้ส่งแต่ละรายการย่อยเพื่อประมวลผลโดยรหัสลูป / สตริงของฉันในเธรดใหม่และส่งผลลัพธ์กลับในคิวปริมาณงานเหล่านี้จะทำงานโดยประมาณพร้อมกันหรือไม่ ที่สำคัญที่สุดในทางทฤษฎีจะเร่งเวลาในการรันสคริปต์หรือไม่?
อีกตัวอย่างหนึ่งอาจเป็นถ้าฉันสามารถเรนเดอร์และบันทึกรูปภาพที่แตกต่างกันสี่ภาพโดยใช้ PIL ในสี่เธรดที่แตกต่างกันและนี่จะเร็วกว่าการประมวลผลภาพทีละภาพหรือไม่? ฉันเดาว่าส่วนประกอบความเร็วนี้เป็นสิ่งที่ฉันสงสัยจริงๆมากกว่าคำศัพท์ที่ถูกต้องคืออะไร
ฉันยังรู้เกี่ยวกับโมดูลการประมวลผลหลายขั้นตอน แต่ความสนใจหลักของฉันในตอนนี้คือการโหลดงานขนาดเล็กถึงกลาง (10-30 วินาที) ดังนั้นฉันคิดว่าการทำงานแบบมัลติเธรดจะเหมาะสมกว่าเนื่องจากกระบวนการย่อยอาจช้าในการเริ่มต้น