Python hanya menggunakan satu inti sekaligus untuk bekerja?

13

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)?

mahmoud hageer
sumber
1
Jika Anda menjalankan proses batch untuk tugas yang berulang dan skrip melakukan hal yang benar dan menggunakan 100% dari satu inti untuk melakukan sesuatu yang bermanfaat itu mungkin tidak terlalu berbahaya. Mulai proses kedua yang menjalankan inti lainnya juga pada 100%. Efek kotor mungkin lebih baik daripada dengan satu proses ulir. Situasi berbeda jika Anda hanya memiliki satu tugas berat untuk diproses.
user30184
Ini sudah membahas lihat utas ini untuk info dan solusi lebih lanjut gis.stackexchange.com/questions/55048/…
iRfAn
Apakah Anda dapat mengedit pertanyaan Anda untuk mengklarifikasi apakah ini tentang Python secara umum atau lebih khusus ArcPy (seperti yang disinggung oleh tag Anda), tolong? Jika ini yang terakhir, dapatkah Anda memasukkan beberapa detail untuk menunjukkan bahwa ini adalah masalahnya, yaitu bagaimana Anda melihatnya?
PolyGeo

Jawaban:

15

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)

GISGe
sumber
4

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).

Alex Tereshenkov
sumber
1

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.

bel
sumber
0

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.

pedang jual
sumber
1
I / O kebal, tetapi begitu juga memanggil sebagian besar fungsi diimplementasikan dalam C, termasuk sebagian besar alat GP dan segala sesuatu di numpy. GIL kurang menjadi batasan dalam lingkungan GIS praktis daripada yang dipikirkan orang.
Jason Scheirer
0

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).

Ken
sumber