Pendekatan yang baik untuk menyelesaikan masalah ini adalah dengan terlebih dahulu menulis kode yang diperlukan untuk mendapatkan satu hasil, kemudian memasukkan kode threading untuk memparalelkan aplikasi.
Dalam dunia yang sempurna ini berarti secara simultan memulai 100.000 utas yang menampilkan hasilnya ke kamus atau daftar untuk diproses nanti, tetapi dalam praktiknya Anda terbatas pada berapa banyak permintaan HTTP paralel yang dapat Anda terbitkan dengan cara ini. Secara lokal, Anda memiliki batasan dalam berapa banyak soket yang dapat Anda buka secara bersamaan, berapa banyak utas eksekusi yang diizinkan oleh penerjemah Python Anda. Secara jarak jauh, Anda mungkin terbatas dalam jumlah koneksi simultan jika semua permintaan bertentangan dengan satu server, atau banyak. Batasan-batasan ini mungkin mengharuskan Anda menulis skrip sedemikian rupa sehingga hanya menyurvei sebagian kecil dari URL pada suatu waktu (100, seperti poster lain yang disebutkan, mungkin merupakan ukuran kumpulan thread yang layak, meskipun Anda mungkin menemukan bahwa Anda dapat berhasil menyebarkan lebih banyak).
Anda dapat mengikuti pola desain ini untuk menyelesaikan masalah di atas:
- Mulai utas yang meluncurkan utas permintaan baru hingga jumlah utas yang saat ini berjalan (Anda dapat melacaknya melalui threading.active_count () atau dengan mendorong objek utas ke dalam struktur data) adalah> = jumlah maksimum permintaan simultan Anda (katakan 100) , lalu tidur sebentar. Utas ini harus berakhir ketika tidak ada lagi URL untuk diproses. Dengan demikian, utas akan terus bangun, meluncurkan utas baru, dan tidur sampai Anda selesai.
- Mintalah utas permintaan menyimpan hasilnya dalam beberapa struktur data untuk pengambilan dan keluaran nanti. Jika struktur tempat Anda menyimpan hasilnya adalah
list
atau dict
dalam CPython, Anda dapat dengan aman menambahkan atau memasukkan item unik dari utas Anda tanpa kunci , tetapi jika Anda menulis ke file atau memerlukan interaksi data cross-thread yang lebih kompleks, Anda harus menggunakan saling pengecualian mengunci untuk melindungi negara ini dari korupsi .
Saya sarankan Anda menggunakan modul threading . Anda dapat menggunakannya untuk meluncurkan dan melacak utas yang sedang berjalan. Dukungan threading Python kosong, tetapi deskripsi masalah Anda menunjukkan bahwa itu sepenuhnya cukup untuk kebutuhan Anda.
Akhirnya, jika Anda ingin melihat aplikasi langsung yang cukup dari aplikasi jaringan paralel ditulis dengan Python, memeriksa ssh.py . Ini adalah perpustakaan kecil yang menggunakan threading Python untuk memparalelkan banyak koneksi SSH. Desainnya cukup dekat dengan kebutuhan Anda sehingga Anda mungkin menganggapnya sebagai sumber yang bagus.