ฉันสังเกตเห็นเมื่อเร็ว ๆ นี้ว่าหลามใช้เพียงหนึ่งคอร์ต่อครั้งในการทำงาน มีวิธีหนึ่งอาจจะสร้างหรือคำสั่งพิเศษเพื่อให้ใช้ทรัพยากรทั้งหมด (คอร์ที่สอง)?
ฉันสังเกตเห็นเมื่อเร็ว ๆ นี้ว่าหลามใช้เพียงหนึ่งคอร์ต่อครั้งในการทำงาน มีวิธีหนึ่งอาจจะสร้างหรือคำสั่งพิเศษเพื่อให้ใช้ทรัพยากรทั้งหมด (คอร์ที่สอง)?
คำตอบ:
คุณสามารถใช้กระบวนการย่อยเพื่อใช้ประโยชน์จากหลายคอร์ภายในสคริปต์ Python เพื่อให้งานหลายอย่างสามารถทำงานแบบขนาน แต่คุณไม่สามารถแบ่งงานเดียวออกเป็นหลายแกนได้ ดูคำอธิบายโดยละเอียดในคำถามที่พบบ่อยนี้: ArcGIS 10 รองรับโปรเซสเซอร์แบบมัลติคอร์และ / หรือระบบปฏิบัติการ 64 บิตหรือไม่
หากคุณเป็นผู้ใช้ Python ที่มีประสบการณ์คุณอาจสนใจวิธีที่อธิบายไว้ในการนำเสนอผู้ใช้นี้จาก Dev Summit 2014 ซึ่งเรียกว่าParopro Gecesscessing โดยใช้ Python Multiprocessing และ Critical Path Methodแต่ก็ยังไม่อนุญาตให้คุณใช้หลายคอร์สำหรับ งานเดียวกัน
ไม่เช่นนั้นคุณจะต้องรอการเปิดตัว ArcGIS Pro (แอพพลิเคชั่น 64 บิต) ในปีนี้เพื่อทดสอบว่ามัลติเธรดทำงานอย่างไร ... (หรือลองเบต้าตอนนี้)
ดังที่ได้กล่าวมาแล้วไม่มีการรองรับมัลติโปรเซสเซอร์ในเดสก์ท็อป 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)
คำตอบง่ายๆคือไม่ คำตอบที่ดีขึ้นมันขึ้นอยู่กับ
เนื่องจากการใช้งานของ CPython (ไพ ธ อนที่ใช้บ่อยที่สุด) มันปลอดภัยที่จะสมมติว่า Python ของคุณไม่สามารถใช้ประโยชน์จากมัลติเธรด ดู:
http://en.wikipedia.org/wiki/Global_Interpreter_Lock
https://wiki.python.org/moin/GlobalInterpreterLock
โปรดทราบว่า IO มีภูมิคุ้มกันต่อ GIL
ตอนนี้คุณสามารถทำงานเกี่ยวกับเรื่องนี้ ตามที่คนอื่น ๆ ได้ชี้ให้เห็นคุณสามารถวางไข่ออกจากกระบวนการย่อยและห้องสมุดมัลติโปรเซสเซอร์สามารถช่วยคุณได้
ฉันไม่สามารถแก้ไขปัญหา ArcGIS ได้ แต่เท่าที่การประมวลผลหลายงานโดยใช้ Python คุณเคยพิจารณาตัวจัดการงานอย่าง Celery (celeryproject.org) หรือยัง สิ่งนี้จะทำให้คุณต้องระบุงานการประมวลผลที่แตกต่างกันส่งไปยัง "ผู้จัดการ" เพื่อจัดจำหน่ายเรียกใช้ "คนงาน" ที่รับงานจากผู้จัดการประมวลผลและรายงานผลลัพธ์
นี่ไม่ใช่เรื่องง่ายที่จะนำไปใช้ แต่มีความยืดหยุ่นอย่างไม่น่าเชื่อและช่วยให้คุณสามารถใช้ประโยชน์จากความสามารถในการประมวลผลได้เต็มที่ (เช่นใช้แกนที่ว่าง)