Skip to main content

A library of multithreaded iterator workflows.

Project description

Build Status

Quenouille

A library of multithreaded iterator workflows for python.

Installation

You can install quenouille with pip with the following command:

pip install quenouille

Usage

imap

Function lazily consuming an iterator and applying the desired function over the yielded items in a multithreaded fashion. The function will yield results in an order consistent with the provided iterator.

Furthermore, it's possible to tweak options regarding group parallelism if you ever need to ensure that a limited number of threads may perform their taks over the same group, e.g. a domain name when fetching urls: you can give a function extracting the group from the current taks, you can tweak the maximum number of threads working on a same group and finally you can edit a group's buffer size to let the function load more values into memory in hope of finding next ones it can process without needing to wait.

If you don't care about output order and want snappier performance, the library also exports an imap_unordered method.

import csv
from quenouille import imap

# Example fetching urls from a CSV file
with open(csv_path, 'r') as f:
  reader = csv.DictReader(f)

  urls = (line['url'] for line in reader)

  # The `fetch` function remains to be implemented by the reader
  for html in imap(urls, fetch, 10):

    # Results will be yielded in lines order
    print(html)

Arguments

  • iterable iterable: Any python iterable.
  • func callable: Function used to perform desired tasks. The function takes any item yielded from the given iterable as sole argument. Note that since this function will be dispatched in a multithreaded environment, it should be thread-safe.
  • threads int: Number of threads to use.
  • group ?callable [None]: Function taking a single item yielded by the provided iterable and returning its group.
  • group_parallelism ?int [Infinity]: Maximum number of threads that can work on the same group at once. Defaults to no limit. This option requires that you give a function as the group argument.
  • group_buffer_size ?int [1]: Maximum number of values that will be loaded into memory from the iterable before waiting for other relevant threads to be available.
  • listener callable [None]: A function called on certain events with the name of the event and the related item.

Events

  • start: Emitted when the given function actually starts to work on a yielded item.

imap_unordered

Function lazily consuming an iterator and applying the desired function over the yielded items in a multithreaded fashion. The function will yield results in arbitrary order based on thread completion.

Furthermore, it's possible to tweak options regarding group parallelism if you ever need to ensure that a limited number of threads may perform their taks over the same group, e.g. a domain name when fetching urls: you can give a function extracting the group from the current taks, you can tweak the maximum number of threads working on a same group and finally you can edit a group's buffer size to let the function load more values into memory in hope of finding next ones it can process without needing to wait.

If output order is important to you, the library also exports an imap method.

import csv
from quenouille import imap_unordered

# Example fetching urls from a CSV file
with open(csv_path, 'r') as f:
  reader = csv.DictReader(f)

  urls = (line['url'] for line in reader)

  # The `fetch` function remains to be implemented by the reader
  for html in imap_unordered(urls, fetch, 10):

    # Results will be yielded in arbitrary order as soon as tasks complete
    print(html)

Arguments

  • iterable iterable: Any python iterable.
  • func callable: Function used to perform desired tasks. The function takes any item yielded from the given iterable as sole argument. Note that since this function will be dispatched in a multithreaded environment, it should be thread-safe.
  • threads int: Number of threads to use.
  • group ?callable [None]: Function taking a single item yielded by the provided iterable and returning its group.
  • group_parallelism ?int [Infinity]: Maximum number of threads that can work on the same group at once. Defaults to no limit. This option requires that you give a function as the group argument.
  • group_buffer_size ?int [1]: Maximum number of values that will be loaded into memory from the iterable before waiting for other relevant threads to be available.
  • listener callable [None]: A function called on certain events with the name of the event and the related item.

Events

  • start: Emitted when the given function actually starts to work on a yielded item.

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

quenouille-0.1.0.tar.gz (5.5 kB view details)

Uploaded Source

Built Distribution

quenouille-0.1.0-py3-none-any.whl (7.2 kB view details)

Uploaded Python 3

File details

Details for the file quenouille-0.1.0.tar.gz.

File metadata

  • Download URL: quenouille-0.1.0.tar.gz
  • Upload date:
  • Size: 5.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.11.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/39.0.1 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.6.5

File hashes

Hashes for quenouille-0.1.0.tar.gz
Algorithm Hash digest
SHA256 e4e75a1b877c4dc9507f58198307e6202e5a117b562ee6074ad457cc1e10bc27
MD5 4bd9d5911f4dfea5b74ba0a78c26b20e
BLAKE2b-256 4420899f92d8325f2cc813074d463cad3f083e689880e9d0e958bced4590da74

See more details on using hashes here.

File details

Details for the file quenouille-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: quenouille-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 7.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.11.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/39.0.1 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.6.5

File hashes

Hashes for quenouille-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 328605eccdf295e262456637976c411b6028566dbc8d209c8df7cd810aa589aa
MD5 0931620af0b7aa1c83cf26edb27886ff
BLAKE2b-256 ce86406edfdd95cf88b35d8f4af26bcdc872af959620af68da3d3bbde191d128

See more details on using hashes here.

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