Skip to main content

High-Performance Asynchronous HTTP Client setting Requests on Fire 🔥

Project description

FireRequests 🔥

PyPI version License Python version

FireRequests is a high-performance, asynchronous HTTP client library for Python, engineered to accelerate your file transfers. By harnessing advanced concepts like semaphores, exponential backoff with jitter, concurrency, and fault tolerance, FireRequests can achieve up to a 6x real-world speedup in file downloads and uploads compared to traditional synchronous methods.

Features 🚀

  • Asynchronous I/O: Non-blocking network and file operations using asyncio, aiohttp, and aiofiles, boosting throughput for I/O-bound tasks.
  • Concurrent Transfers: Uses asyncio.Semaphore to limit simultaneous tasks, optimizing performance by managing system resources effectively.
  • Fault Tolerance: Retries failed tasks with exponentially increasing wait times, adding random jitter to prevent network congestion.
  • Chunked Processing: Files are split into configurable chunks for parallel processing, significantly accelerating uploads/downloads.
  • Compatibility: Supports environments like Jupyter through nest_asyncio, enabling reusable asyncio loops for both batch and interactive Jupyter use.

Installation 📦

Install FireRequests using pip:

pip install firerequests

Quick Start 🏁

Accelerate your downloads with just a few lines of code:

Python Usage

from firerequests import FireRequests

url = "https://mirror.clarkson.edu/zorinos/isos/17/Zorin-OS-17.2-Core-64-bit.iso"
filename = "Zorin-OS-17.2-Core-64-bit.iso"

fr = FireRequests()
fr.download(url, filename)

Command Line Interface

!firerequests https://mirror.clarkson.edu/zorinos/isos/17/Zorin-OS-17.2-Core-64-bit.iso --filename Zorin-OS-17.2-Core-64-bit.iso

Parameters:

  • url (required): The URL to download the file from.
  • --filename (optional): The name to save the downloaded file. Defaults to filename from URL.
  • --max_files (optional): The number of concurrent file chunks. Defaults to 10.
  • --chunk_size (optional): The size of each chunk in bytes. Defaults to 2 * 1024 * 1024 (2 MB).

Real-World Speed Test 🏎️

FireRequests delivers significant performance improvements over traditional download methods. Below is the result of a real-world speed test:

Normal Download 🐌: 100%|██████████| 3.42G/3.42G [18:26<00:00, 3.09MB/s]
Downloading on 🔥: 100%|██████████| 3.42G/3.42G [03:29<00:00, 16.4MB/s]

🐌 Download Time: 1107.32 seconds
🔥 Download Time: 209.41 seconds

Advanced Usage ⚙️

Downloading Files

from firerequests import FireRequests

url = "https://example.com/largefile.iso"
filename = "largefile.iso"

fr = FireRequests()
fr.download(url, filename, max_files=10, chunk_size=2 * 1024 * 1024)
  • url: The URL of the file to download.
  • filename: The local filename to save the downloaded file.
  • max_files: The maximum number of concurrent chunk downloads.
  • chunk_size: The size of each chunk in bytes.

Uploading Files

from firerequests import FireRequests

file_path = "largefile.iso"
parts_urls = ["https://example.com/upload_part1", "https://example.com/upload_part2", ...]

fr = FireRequests()
fr.upload(file_path, parts_urls, chunk_size=2 * 1024 * 1024, max_files=10)

Comparing Download Speed

from firerequests import FireRequests

url = "https://example.com/largefile.iso"
filename = "largefile.iso"

fr = FireRequests()
fr.compare_speed(url, filename)

License 📄

This project is licensed under the Apache License 2.0 - see the LICENSE file for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

firerequests-0.0.5.tar.gz (9.6 kB view hashes)

Uploaded Source

Built Distribution

firerequests-0.0.5-py3-none-any.whl (10.2 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page