Saya sedikit bingung apakah multithreading berfungsi dengan Python atau tidak.
Saya tahu ada banyak pertanyaan tentang ini dan saya telah membaca banyak di antaranya, tetapi saya masih bingung. Saya tahu dari pengalaman saya sendiri dan telah melihat orang lain memposting jawaban dan contoh mereka sendiri di sini di StackOverflow bahwa multithreading memang dimungkinkan dengan Python. Jadi mengapa semua orang terus mengatakan bahwa Python dikunci oleh GIL dan hanya satu utas yang dapat berjalan dalam satu waktu? Ini jelas berhasil. Atau apakah ada perbedaan yang tidak saya dapatkan di sini?
Banyak poster / responden juga tetap menyebutkan bahwa threading dibatasi karena tidak menggunakan banyak core. Tapi saya akan mengatakan mereka masih berguna karena mereka melakukan pekerjaan secara bersamaan dan dengan demikian menyelesaikan beban kerja gabungan lebih cepat. Maksud saya, mengapa bahkan ada modul utas Python?
Memperbarui:
Terima kasih atas semua jawaban sejauh ini. Cara saya memahaminya adalah bahwa multithreading hanya akan berjalan secara paralel untuk beberapa tugas IO, tetapi hanya dapat berjalan satu per satu untuk beberapa tugas inti yang terikat CPU.
Saya tidak sepenuhnya yakin apa artinya ini bagi saya dalam istilah praktis, jadi saya hanya akan memberikan contoh jenis tugas yang ingin saya multithread. Misalnya, saya ingin mengulang melalui daftar string yang sangat panjang dan saya ingin melakukan beberapa operasi string dasar pada setiap item daftar. Jika saya memisahkan daftar, mengirim setiap sublist untuk diproses oleh kode loop / string saya di thread baru, dan mengirim hasilnya kembali ke antrean, apakah beban kerja ini akan berjalan kira-kira pada waktu yang sama? Yang paling penting apakah ini secara teoritis akan mempercepat waktu yang diperlukan untuk menjalankan skrip?
Contoh lain mungkin jika saya dapat membuat dan menyimpan empat gambar berbeda menggunakan PIL di empat utas berbeda, dan apakah ini lebih cepat daripada memproses gambar satu per satu demi satu? Saya kira komponen kecepatan inilah yang benar-benar saya pertanyakan daripada terminologi yang benar.
Saya juga tahu tentang modul multiprosesing tetapi minat utama saya saat ini adalah untuk beban tugas kecil-menengah (10-30 detik) dan jadi menurut saya multithreading akan lebih sesuai karena subproses bisa lambat untuk dimulai.