QGET adalah perpustakaan berlisensi APACHE2, yang ditulis dalam Python, untuk mengunduh sumber daya web dengan cara yang tidak sinkron secepat mungkin.
Di bawah kap ia mendapat manfaat dari asyncio dan aiohttp untuk membuat beberapa koneksi simultan ke sumber daya dan mengunduhnya menggunakan file bagian buffered.
Daftar isi
wget vs qgettqdm )chunk_bytes dan max_part_mbasyncio oleh qget_coro COROUTINEwget vs qget Pertimbangkan fragmen konfigurasi nginx sederhana seperti ini:
http {
server {
...
limit_rate 5m ;
...
}
} Sekarang mari kita bandingkan statistik unduh untuk wget dan qget untuk file dan konfigurasi 1000MB yang disebutkan di atas:
| Aplikasi | Total waktu [s] | Kecepatan rata -rata [MB/S] | Detail |
|---|---|---|---|
wget | 251.34 | 3.98 | |
qget | 16.00 | 95.97 | Tes Batas Koneksi: 5.00s Unduh: 10.42S Bagian Penulisan Ulang: 0,58s |
Kesimpulan :
Untuk pembatasan tingkat sederhana ( per koneksi ) qget memungkinkan untuk mencapai kecepatan pengunduhan yang lebih cepat beberapa kali berdasarkan kecepatan koneksi internet pengguna, jumlah permintaan simultan dan konfigurasi server sumber daya. Dalam contoh di atas qget dicapai lebih dari 24x kecepatan unduhan wget .
Untuk kasus yang lebih rumit ( misalnya batas koneksi per IP ) Tes pengukuran batas koneksi otomatis dibuat untuk menghitung berapa banyak permintaan simultan yang dapat dicapai sebelum server menolak yang berikutnya.
Anda dapat mengunduh file biner yang dipilih dari rilis. Versi yang tersedia:
Untuk menginstal Modul qget , cukup:
$ pip install qgetPastikan Anaconda diinstal.
Untuk membangun di jendela (di anaconda prompt):
$ build.bat Untuk membangun di POSIX (Paket libc-bin dan binutils diperlukan):
$ build.shArgumen fungsi:
URL (str): URL untuk mengunduh sumber daya.
FilePath (str, opsional): jalur output untuk sumber daya yang diunduh.
Jika tidak mengaturnya ke direktori kerja saat ini dan nama file dari URL. Default untuk tidak ada.
Override (bool, opsional): Bendera Jika file output yang ada harus ditimpa. Default ke false.
AUTH (str, opsional): String of User: Password Pair untuk koneksi SSL. Default untuk tidak ada.
verifikasi_ssl (bool, opsional): Bendera Jika validasi sertifikat SSL harus dilakukan. Default ke true.
mock_browser (bool, opsional): flag jika header agen pengguna harus ditambahkan ke permintaan. Default ke true.
String agen pengguna default: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
(Khtml, Like Gecko) Chrome/101.0.4951.67 Safari/537.36 '
proxy_url (str, opsional): http/socks4/socks5 proxy url dalam format 'protocol: // user: password@ip: port'.
Default untuk tidak ada.
Header: (Dict [str, str], opsional): Header khusus akan dikirim. Default untuk tidak ada.
Jika Set User dapat menentukan agen pengguna sendiri dan menerima header, jika tidak, jika tidak akan digunakan.
Progress_ref (ProgressState, Opsional): Referensi ke Status Kemajuan.
Jika melewati semua bagian byte dan menulis ulang status akan diperbarui di dalamnya. Default untuk tidak ada.
Max_connections (int, opsional): Jumlah maksimum koneksi http asinkron. Default ke 50.
Connection_test_sec (int, opsional): Waktu maksimum dalam detik yang ditetapkan untuk menguji
berapa banyak koneksi asinkron dapat dicapai ke URL.
Jika diatur ke 0 tes akan dihilangkan. Default ke 5.
chunk_bytes (int, opsional): Potongan data yang dibaca dalam iterasi dari URL dan simpan ke file bagian dalam byte.
Akan digunakan juga saat menulis ulang suku cadang ke file output. Jika batas disediakan, ini dapat ditimpa
Iterasi aliran. Default ke 2621440.
MAX_PART_MB (float, opsional): Diinginkan (jika mungkin) ukuran bagian maks di megabytes. Default ke 5.
Retries (int, opsional): Nomor ulang untuk unduhan bagian. Default ke 10.
Retry_sec (int, opsional): Waktu untuk menunggu antara retries bagian unduhan dalam hitungan detik. Default ke 1.
Batas (str, opsional): Batas tingkat unduhan di MBPS. Dapat dipasok dengan unit sebagai "nunit", mis. "5m".
Unit yang valid (case tidak sensitif): b, k, m, g, kb, mb, gb. 0 byte akan diperlakukan sebagai tidak ada batasan.
Default untuk tidak ada.
tmp_dir (str, opsional): jalur direktori sementara. Jika tidak mengaturnya ke direktori OS TMP.
Default untuk tidak ada.
Debug (bool, opsional): bendera debug. Default ke false.
Untuk menggunakan dalam kode cukup impor fungsi modul:
from qget import qget
url = "https://speed.hetzner.de/100MB.bin"
qget ( url ) Untuk digunakan dalam kode dengan loop sendiri dan asyncio :
import asyncio
from qget import qget_coro
async def main ( loop ):
url = "https://speed.hetzner.de/100MB.bin"
download_task = loop . create_task ( qget_coro ( url ))
await download_task
# Or just
# await qget_coro(url)
loop = asyncio . get_event_loop ()
loop . run_until_complete ( main ( loop ))
loop . close () Penggunaan untuk Kait Kemajuan (secara default kait digunakan untuk menampilkan bilah kemajuan tqdm ):
from qget import ProgressState , qget
def print_download_progress ( progress : ProgressState ) -> None :
print ( f"Download: { progress . get_download_progress ():.2f } %" , end = " r " )
if progress . get_download_bytes () == progress . total_bytes :
print ()
def print_rewrite_progress ( progress : ProgressState ) -> None :
print ( f"Rewrite: { progress . get_rewrite_progress ():.2f } %" , end = " r " )
if progress . rewrite_bytes == progress . total_bytes :
print ()
url = "https://speed.hetzner.de/100MB.bin"
progress = ProgressState (
on_download_progress = print_download_progress ,
on_rewrite_progress = print_rewrite_progress
)
qget ( url , progress_ref = progress ) Penggunaan: qget [-h] [-o filepath] [-f] [-a auth] [-no-verify] [---no-mock]
[--proxy proxy_url] [-H header] [-c max_connections]
[--Test Connection_test_sec] [--teTes chunk_bytes] [--part max_part_mb]
[--Retries retries] [--Retry_sec retry_sec] [-batas batas] [--tmp tmp_dir]
[--debug] [-v]
url
Download Sumber Daya dari URL yang Diberikan di Bagian Buffered Menggunakan Koneksi HTTP Asynchronous
dengan sesi AIOHTTP.
Argumen Posisi:
URL URL Sumber Daya
Opsi:
-h, --help menunjukkan pesan bantuan ini dan keluar
-o filepath, -output filepath
Jalur keluaran untuk sumber daya yang diunduh.
-f, -force memaksa file override untuk output.
-a auth, --Auth String Auth Pengguna: Password Pair untuk Koneksi SSL.
--No-Verifikasi Menonaktifkan Validasi Sertifikat SSL.
--no-mock menonaktifkan header agen pengguna default.
--proxy proxy_url http/socks4/socks5 proxy url dalam format
'Protocol: // Pengguna: Kata Sandi@IP: Port'.
-H header, -header header
Header khusus dalam format 'Nama: Nilai'. Bisa disediakan banyak
kali.
-c max_connections, - -Connections max_connections
Jumlah maksimum koneksi HTTP asinkron.
--Test Connection_test_sec
Waktu maksimum dalam detik yang ditugaskan untuk menguji berapa banyak asinkron
Koneksi dapat dicapai ke URL. Gunakan 0 untuk melewatkan.
-Bytes chunk_bytes potongan data yang dibaca dalam iterasi dari URL dan simpan ke file bagian dalam
byte. Akan digunakan juga saat menulis ulang suku cadang ke file output.
--bagian MAX_PART_MB Diinginkan (jika memungkinkan) Ukuran bagian maks di megabytes.
--Retries Retries Nomor untuk Unduh Bagian.
--Retry_sec Retry_sec waktu untuk menunggu antara penitipan ulang bagian unduhan dalam hitungan detik.
--Batas batas tingkat unduhan batas di MBPS. Dapat disuplai dengan unit sebagai 'nunit',
misalnya. '5m'. Unit yang valid (case tidak sensitif): b, k, m, g, kb, mb, gb.
0 byte akan diperlakukan sebagai tidak ada batasan.
-TMP TMP_DIR Jalur direktori sementara. Jika tidak mengaturnya ke OS TMP
direktori.
--Debug Debug Flag.
-V, --Version menampilkan versi aktual QGET.
Dapat digunakan juga dari modul python dengan argumen yang sama seperti untuk biner:
python -m qget https://speed.hetzner.de/100MB.binBeberapa header dapat dipasok sebagai berikut:
python -m qget -H ' name1:value1 ' -H ' name2:value2 ' https://speed.hetzner.de/100MB.bin Limiter mencoba mengurangi tingkat byte yang diunduh dengan menambahkan jeda antar iterasi atas konten sumber daya. Jika tingkat unduhan yang sangat rendah diminta, cobalah untuk menurunkan jumlah koneksi ( max_connections atau --connections MAX_CONNECTIONS ) untuk mencapai akurasi yang lebih baik untuk batas.
Ukuran bagian dihitung dalam runtime berdasarkan ukuran sumber daya dalam byte dan jumlah maksimum koneksi asinkron yang ditetapkan oleh pengguna (atau uji koneksi). Max Part Ukuran Param ( max_part_mb atau --part MAX_PART_MB ) yang disediakan oleh pengguna digunakan sebagai batas teratas untuk nilai yang dihitung.
part_bytes = min (sumber daya_bytes/koneksi, max_part_bytes)