Saya perhatikan baru-baru ini bahwa python hanya menggunakan satu inti pada satu waktu untuk bekerja. Apakah ada cara, mungkin build atau perintah khusus, untuk membuatnya menggunakan semua sumber daya (inti kedua)?
Saya perhatikan baru-baru ini bahwa python hanya menggunakan satu inti pada satu waktu untuk bekerja. Apakah ada cara, mungkin build atau perintah khusus, untuk membuatnya menggunakan semua sumber daya (inti kedua)?
Jawaban:
Anda dapat menggunakan subproses untuk memanfaatkan banyak inti dalam skrip Python, sehingga beberapa tugas dapat berjalan secara paralel. Tetapi Anda tidak dapat membagi satu tugas menjadi beberapa core. Lihat penjelasan terperinci dalam FAQ ini: Apakah ArcGIS 10 mendukung prosesor multi-core dan / atau Sistem Operasi 64-bit?
Jika Anda adalah pengguna Python berpengalaman, Anda mungkin tertarik pada pendekatan yang dijelaskan dalam presentasi pengguna ini dari Dev Summit 2014, yang disebut Paralel Geoprocessing Menggunakan Python Multiprocessing dan Critical Path Metodologi , masih tidak akan memungkinkan Anda untuk menggunakan beberapa core untuk tugas yang sama.
Kalau tidak, Anda harus menunggu rilis ArcGIS Pro (aplikasi 64 bit sepenuhnya) akhir tahun ini untuk menguji kinerja multi-threading ... (atau coba Beta sekarang)
Seperti beberapa yang disebutkan, tidak ada dukungan untuk multi-pemrosesan di ArcGIS Desktop. Ketika berbicara tentang memproses dataset GIS dalam lingkungan desktop, saya mencoba mencari tahu apakah saya dapat membagi alur kerja yang besar menjadi potongan yang lebih kecil yang akan dihitung pada saat yang sama memuat banyak inti. Hampir setiap kasus harus diselidiki secara individual karena perilaku alat GP dapat berbeda secara signifikan.
Pikirkan apa yang lebih cepat dilakukan ketika memecahkan masalah matematika sederhana. Apa cara tercepat untuk menghitung semua angka dari 1 hingga 100?
1) dengan menjumlahkan hasil satu per satu dan menambahkan jumlahnya satu sama lain secara bertahap (1 + 2 = 3, 3 + 3 = 6,6 + 4 = 10 dan seterusnya). Satu inti sedang mengerjakan tugas ini.
2) membagi nilai-nilai sebelumnya menjadi potongan-potongan individual dan jumlahkan nilai-nilai di sana terlebih dahulu (1 hingga 30, 31 hingga 60 dan 60 hingga 100). Tiga inti akan bekerja pada saat yang sama (langkah terakhir adalah menjumlahkan tiga nilai yang diterima).
Karena alat GP yang berbeda adalah implementasi dari algoritma yang berbeda dengan notasi O-besar yang berbeda , Anda mungkin perlu mendekatinya secara berbeda dalam hal mengirimkan proses multipel.
Titik awal yang baik adalah belajar bagaimana multiprocessing library di Python bekerja. Saya menggunakan cukup banyak.
Saya juga memperhatikan bahwa menjalankan skrip Python dari baris perintah dengan menggunakan Python 64-bit biasanya menghasilkan menjalankan lebih cepat (dibandingkan dengan menjalankan IDE, tetapi ini mungkin tidak terjadi pada mesin Anda). Latar belakang geoproses diperkenalkan pada 10.1, tetapi coba jalankan skrip Python dengan Python 64 bit dan lihat bagaimana kinerjanya terpengaruh.
ArcGIS Pro yang disebutkan dalam jawaban lain tersedia dalam versi beta 5 untuk diunduh (perlu diingat bahwa Anda harus menjadi peserta Komunitas Esri Beta untuk mengirimkan bug apa pun dan memiliki akses ke akun ArcGIS Online untuk Organisasi agar dapat jalankan Pro).
Pypy adalah versi python yang sesuai yang berjalan 4-5 kali lebih cepat dari CPython (python "standar").
Jika Anda cukup berani untuk membuatnya dari sumber, ada cabang yang "dapat menjalankan beberapa utas lapar CPU independen dalam proses yang sama secara paralel." Ini berarti Anda mendapatkan manfaat multi-threading tanpa harus menulis ulang kode apa pun.
Jawaban sederhana adalah tidak. Jawaban yang lebih baik tergantung.
Karena implementasi CPython (python yang paling umum digunakan), aman untuk mengasumsikan Python Anda tidak dapat benar-benar memanfaatkan multithreading. Lihat:
http://en.wikipedia.org/wiki/Global_Interpreter_Lock
https://wiki.python.org/moin/GlobalInterpreterLock
Perhatikan bahwa IO kebal terhadap GIL.
Sekarang Anda bisa menyelesaikannya. Seperti yang telah ditunjukkan orang lain, Anda dapat menelurkan subproses dan perpustakaan multiprosesing dapat membantu Anda.
Saya tidak bisa mengatasi masalah ArcGIS, tetapi sejauh memproses banyak tugas menggunakan Python, sudahkah Anda mempertimbangkan task manager seperti Celery (celeryproject.org)? Ini akan mengharuskan Anda mengidentifikasi tugas pemrosesan yang berbeda, menyerahkannya ke "manajer" untuk distribusi, menjalankan "pekerja" yang menerima tugas dari manajer, memprosesnya, dan melaporkan hasil.
Ini non-sepele untuk diimplementasikan, tetapi memiliki fleksibilitas luar biasa, dan memungkinkan Anda untuk mengambil keuntungan penuh dari kemampuan pemrosesan (yaitu, gunakan core yang tidak digunakan itu).