Python ใช้เพียงหนึ่งคอร์ต่อครั้งเท่านั้นใช่ไหม?


13

ฉันสังเกตเห็นเมื่อเร็ว ๆ นี้ว่าหลามใช้เพียงหนึ่งคอร์ต่อครั้งในการทำงาน มีวิธีหนึ่งอาจจะสร้างหรือคำสั่งพิเศษเพื่อให้ใช้ทรัพยากรทั้งหมด (คอร์ที่สอง)?


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

มีการหารือกันแล้วดูหัวข้อนี้สำหรับข้อมูลเพิ่มเติมและการแก้ปัญหาgis.stackexchange.com/questions/55048/…
iRfAn

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

คำตอบ:


15

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

หากคุณเป็นผู้ใช้ Python ที่มีประสบการณ์คุณอาจสนใจวิธีที่อธิบายไว้ในการนำเสนอผู้ใช้นี้จาก Dev Summit 2014 ซึ่งเรียกว่าParopro Gecesscessing โดยใช้ Python Multiprocessing และ Critical Path Methodแต่ก็ยังไม่อนุญาตให้คุณใช้หลายคอร์สำหรับ งานเดียวกัน

ไม่เช่นนั้นคุณจะต้องรอการเปิดตัว ArcGIS Pro (แอพพลิเคชั่น 64 บิต) ในปีนี้เพื่อทดสอบว่ามัลติเธรดทำงานอย่างไร ... (หรือลองเบต้าตอนนี้)


4

ดังที่ได้กล่าวมาแล้วไม่มีการรองรับมัลติโปรเซสเซอร์ในเดสก์ท็อป ArcGIS เมื่อพูดถึงการประมวลผลชุดข้อมูล GIS ในสภาพแวดล้อมเดสก์ท็อปฉันพยายามค้นหาว่าฉันสามารถแยกเวิร์กโฟลว์ขนาดใหญ่ออกเป็นชิ้นเล็ก ๆ ซึ่งจะคำนวณในเวลาเดียวกันโหลดหลายคอร์ได้หรือไม่ ควรตรวจสอบเกือบทุกกรณีเป็นรายบุคคลเนื่องจากพฤติกรรมของเครื่องมือ GP อาจแตกต่างกันอย่างมีนัยสำคัญ

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

1) โดยการรวมผลลัพธ์ทีละรายการและเพิ่มผลรวมเข้าด้วยกันทีละส่วน (1 + 2 = 3, 3 + 3 = 6,6 + 4 = 10 และอื่น ๆ ) แกนหลักหนึ่งกำลังทำงานกับภารกิจนี้

2) แยกค่าล่วงหน้าเป็นส่วนบุคคลและรวมค่าที่มีก่อน (1 ถึง 30, 31 ถึง 60 และ 60 ถึง 100) สามแกนจะทำงานในเวลาเดียวกัน (ขั้นตอนสุดท้ายคือการหาผลรวมสามค่าที่ได้รับ)

เนื่องจากเครื่องมือ GP ที่แตกต่างกันคือการใช้งานของอัลกอริทึมที่แตกต่างกันพร้อมด้วยสัญกรณ์ Big-O ที่แตกต่างกัน

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

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

ArcGIS Pro ที่มีชื่อในคำตอบอื่นนั้นมีให้ดาวน์โหลดในรุ่นเบต้า 5 (โปรดทราบว่าคุณจะต้องเป็นผู้มีส่วนร่วมของชุมชน Esri Betaเพื่อส่งข้อบกพร่องใด ๆ และสามารถเข้าถึงArcGIS Online สำหรับบัญชีองค์กรเพื่อให้สามารถ เรียกใช้ Pro)


1

Pypyเป็นไพ ธ อนรุ่นที่ทำงานได้เร็วกว่า CPython 4-5 เท่า (ไพ ธ อน "มาตรฐาน")

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


0

คำตอบง่ายๆคือไม่ คำตอบที่ดีขึ้นมันขึ้นอยู่กับ

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

http://en.wikipedia.org/wiki/Global_Interpreter_Lock

https://wiki.python.org/moin/GlobalInterpreterLock

โปรดทราบว่า IO มีภูมิคุ้มกันต่อ GIL

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


1
I / O นั้นมีภูมิคุ้มกัน แต่จะเรียกใช้ฟังก์ชันส่วนใหญ่ใน C รวมถึงเครื่องมือ GP ส่วนใหญ่และทุกอย่างใน numpy GIL นั้นมีข้อ จำกัด น้อยกว่าในสภาพแวดล้อม GIS ที่ใช้งานได้จริงกว่าที่คิด
Jason Scheirer

0

ฉันไม่สามารถแก้ไขปัญหา ArcGIS ได้ แต่เท่าที่การประมวลผลหลายงานโดยใช้ Python คุณเคยพิจารณาตัวจัดการงานอย่าง Celery (celeryproject.org) หรือยัง สิ่งนี้จะทำให้คุณต้องระบุงานการประมวลผลที่แตกต่างกันส่งไปยัง "ผู้จัดการ" เพื่อจัดจำหน่ายเรียกใช้ "คนงาน" ที่รับงานจากผู้จัดการประมวลผลและรายงานผลลัพธ์

นี่ไม่ใช่เรื่องง่ายที่จะนำไปใช้ แต่มีความยืดหยุ่นอย่างไม่น่าเชื่อและช่วยให้คุณสามารถใช้ประโยชน์จากความสามารถในการประมวลผลได้เต็มที่ (เช่นใช้แกนที่ว่าง)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.