Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

จะใช้งาน Concurrency กับ Threads ใน Python ได้อย่างไร?


แนะนำตัว

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

การทำงานพร้อมกันเป็นส่วนของตรรกะ ภายในโปรแกรมเดียวที่อนุญาตให้เปิดเส้นทางการดำเนินการที่แตกต่างกันมากมาย รวมถึงการสตรีม I/O ที่แยกจากกัน การเรียกใช้แบบสอบถาม SQL เป็นต้น ในลักษณะที่การดำเนินการดูเหมือนพร้อมกันและไม่ขึ้นต่อกัน .

ทำอย่างไร..

ขั้นแรก เราสร้างเธรดเดียวเพื่อไปยัง URL ของไซต์ และต่อมาดูที่วิธีใช้แนวคิดของเธรดเพื่อเพิ่มความเร็วของโปรแกรม

# ขั้นตอนที่ 1 - ทำรายการ URL ของเว็บไซต์ที่คุณต้องการเข้าชมวันนี้นำเข้าการร้องขอtutorialpoints_url =['https://www.tutorialspoint.com/python/index.htm','https://www.tutorialspoint.com/ cplusplus/index.htm','https://www.tutorialspoint.com/java/index.htm','https://www.tutorialspoint.com/html/index.htm','https://www. tutorialspoint.com/cprogramming/index.htm']


# ฟังก์ชั่นเพื่อขอ URL ที่ส่งผ่านและส่งคืนสถานะ codedef visit_site(site_url):"""ส่งคำขอ GET ไปยัง URL ของเว็บไซต์และพิมพ์ข้อมูลการตอบกลับ"""response =request.get(site_url)print(f' *** {site_url} ส่งคืน {response.status_code} หลังจาก {response.elapsed} วินาที')


# ให้เราสร้างเธรดเดียวเพื่อดึงการตอบกลับ __name__ =='__main__':for site_url ใน tutorialpoints_url:visit_site(site_url)print(f" *** end of the program ***")


*** https://www.tutorialspoint.com/python/index.htm ส่งคืน 200 หลังจาก 0:00:00.091103 วินาที*** https://www.tutorialspoint.com/cplusplus/index.htm ส่งคืน 200 หลังจาก 0:00:00.069889 วินาที*** https://www.tutorialspoint.com/java/index.htm ส่งคืน 200 หลังจาก 0:00:00.075864 วินาที*** https://www.tutorialspoint.com/html/index .htm ส่งคืน 200 หลังจาก 0:00:00.075270 วินาที*** https://www.tutorialspoint.com/cprogramming/index.htm ส่งคืน 200 หลังจาก 0:00:00.077984 วินาที*** สิ้นสุดโปรแกรม *** 

คุณสังเกตอะไรจากผลลัพธ์? URL ของไซต์ได้รับการประมวลผลตามลำดับ ลองนึกภาพว่ามี 100 url จากตำแหน่งทางภูมิศาสตร์ต่างๆ ที่คุณต้องการเยี่ยมชมหรือไม่ จากนั้นโปรแกรมของคุณอาจใช้เวลามากในการรอการตอบกลับจากเซิร์ฟเวอร์

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

จากฟังก์ชันการนำเข้าเธรด # เพื่อขอ URL ที่ส่งผ่านและส่งคืนสถานะ codedef visit_site(site_url):"""ส่งคำขอ GET ไปยัง URL ของเว็บไซต์และพิมพ์ข้อมูลการตอบกลับ"""response =request.get(site_url) พิมพ์ (f' *** {site_url} ส่งคืน {response.status_code} หลังจาก {response.elapsed} วินาที ')# วนซ้ำผ่าน URL ของเว็บไซต์และสร้างเธรดสำหรับแต่ละ urlif __name__ =='__main__':for site_url ใน tutorialpoints_url:t =Thread(target=visit_site, args=(site_url,))t.start()


*** https://www.tutorialspoint.com/python/index.htm ส่งคืน 200 หลังจาก 0:00:00.082176 วินาที*** https://www.tutorialspoint.com/html/index.htm คืน 200 หลังจาก 0:00:00.086269 วินาที*** https://www.tutorialspoint.com/java/index.htm ส่งคืน 200 หลังจาก 0:00:00.100746 วินาที*** https://www.tutorialspoint.com/cplusplus/index .htm ส่งคืน 200 หลังจาก 0:00:00.120744 วินาที *** https://www.tutorialspoint.com/cprogramming/index.htm ส่งคืน 200 หลังจาก 0:00:00.111489 วินาที

เสวนา..

  • ไลบรารีเธรดสามารถใช้เพื่อรัน Python ที่เรียกใช้ได้ในเธรดของตัวเอง

  • start() วิธีการเรียกใช้ฟังก์ชัน visit_site ด้วยอาร์กิวเมนต์ site_url

  • เธรดที่เริ่มต้นแล้วจะดำเนินการในเธรดของตัวเองซึ่งได้รับการจัดการโดยระบบปฏิบัติการอย่างสมบูรณ์

ตอนนี้ ถ้าคุณต้องการดูว่าเธรดของคุณยังมีชีวิตอยู่หรือตายแล้ว (เสร็จสมบูรณ์) เราสามารถใช้ฟังก์ชัน is_alive ได้

if t.is_alive():print(f' *** {t} is Still executing')else:print(f' *** {t} is Completed')


*** <กระทู้(กระทู้-10, หยุด 4820)> เสร็จสมบูรณ์