Asynchronous network server programming adalah sebuah pendekatan dalam komunikasi server dimana server dapat saling berkomunikasi, mengirim, dan menerima data dengan bersamaan tanpa harus menghentikan komunikasi dengan client lain.
Asynchronous berbeda dengan sychronous karena pendekatan asynchronous adalah event driven. Pada synchronous programming, operasi yang dilakukan merupakan operasi sekuensial atau berurutan. Ketika sebuah operasi read atau write berlangsung, maka operasi ini menghalangi proses lain dalam melakukan operasi.

Oleh karena itu synchronous programming dalam network server membutuhkan beberapa thread dalam mengatur komunikasi dari beberapa client.
Oleh sebab itu, sychronous programming menggunakan sistem multi-thread.
Sebaliknya, asynchronous programming adalah event driven yang artinya ketika kita memulai operasi yang tidak tahu kapan berhentinya, maka kita membuat callback yang akan dipanggil ketika operasi telah selesai. Operasi asynchronous dapat melakukan operasi select.select() pada python sehingga program dapat memonitor banyak koneksi sekaligus tanpa menggunakan thread yang banyak. Cara kerjanya adalah ketika fungsi select mendeteksi data yang tersedia pada sebuah soket, maka fungsi tersebut akan mengembalikan menuju socket terkait. Socket akan secara cepat menerima data dan dengan cepat melakukan operasi pada sebuah socket dan setelah melaksanakan operasi pada sebuah socket maka socket akan kembali kepada fungsi select yang kemudaian akan menunggu koneksi dari client-client lain. Fungsifungsi tersebut tahu bahwa data yang diterima pasti ada walaupun menerima data kosong dan akan menerima data dengan cepat. Oleh karena itu, server asynchronous tidak boleh digunakan untuk operasi yang lambat atau operasi yang memblok operasi lain. Komunikasi yang berlangsung hanya untuk aplikasi yang mengirimkan data kecil yang cepat, sehingga operasi ini tidak cocok untuk operasi database yang harus mengembalikan data berupa query yang besar. Asynchronous server harus memonitor setiap kondisi dari tiap client, oleh karena itu operasi yang akan menghandle client diusahakan merupakan operasi yang kurang rumit. Operasi yang rumit akan menghambat kinerja server dalam memonitor client lain.
Dalam pemrograman socket asychronous dengan python maka socket harus dikonfigurasi menjadi non-blocking mode. Perintahnya dapat menggunakan socket.socket() atau dapat dengan socket.poll. penggunaan antara kedua fungsi ini hampir sama. Keduanya juga diberikan sebuah daftar socket untuk dimonitor. Hal yang dimonitor oleh fungsi tersebut adalah : socket sedang menerima data, socket siap mengirim data, socket sedang dalam kondisi error. Dalam fungsi select.select() cara kerjanya adalah menunggu salah satu atau lebih dari socket untuk menerima sebuah I/O dari 3 parameter yang dikirimkan kepada fungsi select.select() yaitu : rlist, wlist, xlist[timeout]. Rlist harus berisi sebuah list
socket untuk dimonitor apakah ada data yang masuk. Wlist harus berisi sebuah list socket yang dimonitor untuk mengirimkan data. Xlist berisi list socket untuk dimonitor apakah terjadi error. Fungsi ini kemudian mengembalikan nilai berupa tuple berisi 3 list yang berisi socket dari rlist, wlist, dan xlist. Sedangkan dalam fungsi select.poll mengembalikan nilai object poll yang kemudian akan di-polling untuk mendeteksi event I/O