Skip to main content

No project description provided

Project description

Actions Status PyPI Bytewax User Guide

Bytewax

Python Stateful Stream Processing Framework

Bytewax is a Python framework that simplifies event and stream processing. Because Bytewax couples the stream and event processing capabilities of Flink, Spark, and Kafka Streams with the friendly and familiar interface of Python, you can re-use the Python libraries you already know and love. Connect data sources, run stateful transformations and write to various different downstream systems with built-in connectors or existing Python libraries.

Screen Shot 2022-10-07 at 2 22 49 PM

How it all works

Bytewax is a Python framework and Rust distributed processing engine that uses a dataflow computational model to provide parallelizable stream processing and event processing capabilities similar to Flink, Spark, and Kafka Streams. You can use Bytewax for a variety of workloads from moving data à la Kafka Connect style all the way to advanced online machine learning workloads. Bytewax is not limited to streaming applications but excels anywhere that data can be distributed at the input and output.

Bytewax has an accompanying command line interface, waxctl, which supports the deployment of dataflows on cloud servers or Kubernetes. You can download it here.


Getting Started with Bytewax

pip install bytewax

Install waxctl

Dataflow, Input and Operators

A Bytewax dataflow is Python code that will represent an input, a series of processing steps, and an output. The inputs could range from a Kafka stream to a WebSocket and the outputs could vary from a data lake to a key-value store.

import json

from bytewax import operators as op
from bytewax.connectors.kafka import operators as kop
from bytewax.dataflow import Dataflow

# Bytewax has input and output helpers for common input and output data sources
# but you can also create your own with the [Sink and Source API](https://github.com/bytewax/bytewax/blob/main/docs/articles/advanced-concepts/custom-io-connectors.md).

At a high-level, the dataflow compute model is one in which a program execution is conceptualized as data flowing through a series of operator-based steps. Operators like map and filter are the processing primitives of Bytewax. Each of them gives you a “shape” of data transformation, and you give them regular Python functions to customize them to a specific task you need. See the documentation for a list of the available operators

BROKERS = ["localhost:19092"]
IN_TOPICS = ["in_topic"]
OUT_TOPIC = "out_topic"
ERR_TOPIC = "errors"


def deserialize(kafka_message):
    return json.loads(kafka_message.value)


def anonymize_email(event_data):
    event_data["email"] = "@".join(["******", event_data["email"].split("@")[-1]])
    return event_data


def remove_bytewax(event_data):
    return "bytewax" not in event_data["email"]


flow = Dataflow("kafka_in_out")
stream = kop.input("inp", flow, brokers=BROKERS, topics=IN_TOPICS)
# we can inspect the stream coming from the kafka topic to view the items within on std out for debugging
op.inspect("inspect-oks", stream.oks)
# we can also inspect kafka errors as a separate stream and raise an exception when one is encountered
errs = op.inspect("errors", stream.errs).then(op.raises, "crash-on-err")
deser_msgs = op.map("deserialize", stream.oks, deserialize)
anon_msgs = op.map("anon", deser_msgs, anonymize_email)
filtered_msgs = op.filter("filter_employees", anon_msgs, remove_bytewax)
processed = op.map("map", anon_msgs, lambda m: KafkaSinkMessage(None, json.dumps(m)))
# and finally output the cleaned data to a new topic
kop.output("out1", processed, brokers=BROKERS, topic=OUT_TOPIC)

Windowing, Reducing and Aggregating

Bytewax is a stateful stream processing framework, which means that some operations remember information across multiple events. Windows and aggregations are also stateful, and can be reconstructed in the event of failure. Bytewax can be configured with different state recovery mechanisms to durably persist state in order to recover from failure.

There are multiple stateful operators available like reduce, stateful_map and fold_window. The complete list can be found in the API documentation for all operators. Below we use the fold_window operator with a tumbling window based on system time to gather events and calculate the number of times events have occurred on a per-user basis.

from datetime import datetime, timedelta, timezone

from bytewax.dataflow import Dataflow
from bytewax.operators import window as window_op
from bytewax.operators.window import EventClockConfig, TumblingWindow


# This is the accumulator function, and outputs a list of 2-tuples,
# containing the event's "value" and it's "time" (used later to print info)
def acc_values(acc, event):
    acc.append((event["value"], event["time"]))
    return acc


# This function instructs the event clock on how to retrieve the
# event's datetime from the input.
# Note that the datetime MUST be UTC. If the datetime is using a different
# representation, we would have to convert it here.
def get_event_time(event):
    return datetime.fromisoformat(event["time"])


# Configure the `fold_window` operator to use the event time.
cc = EventClockConfig(get_event_time, wait_for_system_duration=timedelta(seconds=10))

# And a 5 seconds tumbling window
align_to = datetime(2023, 1, 1, tzinfo=timezone.utc)
wc = TumblingWindow(align_to=align_to, length=timedelta(seconds=5))

running_avg_stream = window_op.fold_window(
    "running_average", keyed_stream, cc, wc, list, acc_values
)

Merges and Joins

Merging or Joining multiple input streams is a common task for stream processing, Bytewax enables different types of joins to facilitate different patters.

Merging Streams

Merging streams is like concatenating, there is no logic and the resulting stream will potentially include heterogenous records.

from bytewax import operators as op

from bytewax.connectors.stdio import StdOutSink
from bytewax.dataflow import Dataflow
from bytewax.testing import TestingSource

flow = Dataflow("merge")

src_1 = [
    {"user_id": "123", "name": "Bumble"},
]
inp1 = op.input("inp1", flow, TestingSource(src_1))

src_2 = [
    {"user_id": "123", "email": "bee@bytewax.com"},
    {"user_id": "456", "email": "hive@bytewax.com"},
]
inp2 = op.input("inp2", flow, TestingSource(src_2))
merged_stream = op.merge("merge", inp1, inp2)
op.inspect("debug", merged_stream)
Joining Streams

Joining streams is different than merging because it uses logic to join the records in the streams together. The joins in Bytewax can be running or not. A regular join in streaming is more closely related to an inner join in SQL in that the dataflow will emit data downstream from a join when all of the sides of the join have matched on the key.

from bytewax import operators as op

from bytewax.connectors.stdio import StdOutSink
from bytewax.dataflow import Dataflow
from bytewax.testing import TestingSource

flow = Dataflow("join")

src_1 = [
    {"user_id": "123", "name": "Bumble"},
]
inp1 = op.input("inp1", flow, TestingSource(src_1))
keyed_inp_1 = op.key_on("key_stream_1", inp1, lambda x: x["user_id"])
src_2 = [
    {"user_id": "123", "email": "bee@bytewax.com"},
    {"user_id": "456", "email": "hive@bytewax.com"},
]
inp2 = op.input("inp2", flow, TestingSource(src_2))
keyed_inp_2 = op.key_on("key_stream_2", inp2, lambda x: x["user_id"])

merged_stream = op.join("join", keyed_inp_1, keyed_inp_2)
op.inspect("debug", merged_stream)

Output

Output in Bytewax is described as a sink and these are grouped into connectors. There are a number of basic connectors in the bytewax repo to help you during development. In addition to the built-in connectors, it is possible to use the input and output API to build a custom sink and source. There is also a hub for connectors built by the community, partners and Bytewax. Below is an example of a custom connector for Postgres using the psycopg2 library.

import psycopg2

from bytewax import operators as op
from bytewax.outputs import FixedPartitionedSink, StatefulSinkPartition


class PsqlSink(StatefulSinkPartition):
    def __init__(self):
        self.conn = psycopg2.connect("dbname=website user=bytewax")
        self.conn.set_session(autocommit=True)
        self.cur = self.conn.cursor()

    def write_batch(self, values):
        query_string = """
            INSERT INTO events (user_id, data)
            VALUES (%s, %s)
            ON CONFLICT (user_id)
            DO UPDATE SET data = %s;
        """
        self.cur.execute_values(query_string, values)

    def snapshot(self):
        pass

    def close(self):
        self.conn.close()


class PsqlOutput(FixedPartitionedSink):
    def list_parts(self):
        return ["single"]

    def build_part(for_part, resume_state):
        return PsqlSink()

Execution

Bytewax dataflows can be executed in a single Python process, or on multiple processes on multiple hosts with multiple worker threads. When processing data in a distributed fashion, Bytewax uses routing keys to ensure your state is updated in a correct way automatically.

# a single worker locally
python -m bytewax.run my_dataflow:flow

# Start two worker threads in a single process.
python -m bytewax.run my_dataflow -w 2

# Start a process on two separate machines to form a Bytewax cluster.
# Start the first process with two worker threads on `machine_one`.
machine_one$ python -m bytewax.run my_dataflow -w 2 -i0 -a "machine_one:2101;machine_two:2101"

# Then start the second process with three worker threads on `machine_two`.
machine_two$ python -m bytewax.run my_dataflow -w 3 -i1 -a "machine_one:2101;machine_two:2101"

It can also be run in a Docker container as described further in the documentation.

Kubernetes

The recommended way to run dataflows at scale is to leverage the kubernetes ecosystem. To help manage deployment, we built waxctl, which allows you to easily deploy dataflows that will run at huge scale across multiple compute nodes.

waxctl df deploy my_dataflow.py --name my-dataflow

Why Bytewax?

At a high level, Bytewax provides a few major benefits:

  • The operators in Bytewax are largely “data-parallel”, meaning they can operate on independent parts of the data concurrently.
  • Bytewax offers the ability to express higher-level control constructs, like iteration.
  • Bytewax allows you to develop and run your code locally, and then easily scale that code to multiple workers or processes without changes.
  • Bytewax can be used in both a streaming and batch context
  • Ability to leverage the Python ecosystem directly

Community

Slack Is the main forum for communication and discussion.

GitHub Issues is reserved only for actual issues. Please use the slack community for discussions.

Code of Conduct

Usage

Install the latest release with pip:

pip install bytewax

Building From Source

To build a specific branch, you will need to use Maturin and have Rust installed on your machine. Once those have been installed run

maturin develop -E dev

Important: If you are testing with a maturin built version from source, you should use maturin build --release since maturin develop will be slower.

More Examples

For a more complete example, and documentation on the available operators, check out the User Guide and the /examples folder.

License

Bytewax is licensed under the Apache-2.0 license.

Contributing

Contributions are welcome! This community and project would not be what it is without the contributors. All contributions, from bug reports to new features, are welcome and encouraged. Please view the contribution guidelines before getting started.



With ❤️ Bytewax

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

bytewax-0.18.1-cp311-none-win_amd64.whl (5.3 MB view details)

Uploaded CPython 3.11Windows x86-64

bytewax-0.18.1-cp311-cp311-manylinux_2_31_x86_64.whl (8.1 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.31+ x86-64

bytewax-0.18.1-cp311-cp311-manylinux_2_27_x86_64.whl (8.1 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.27+ x86-64

bytewax-0.18.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (7.8 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARMv7l

bytewax-0.18.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (8.1 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

bytewax-0.18.1-cp311-cp311-macosx_11_0_arm64.whl (5.9 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

bytewax-0.18.1-cp311-cp311-macosx_10_12_x86_64.whl (6.2 MB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

bytewax-0.18.1-cp310-none-win_amd64.whl (5.3 MB view details)

Uploaded CPython 3.10Windows x86-64

bytewax-0.18.1-cp310-cp310-manylinux_2_31_x86_64.whl (8.1 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.31+ x86-64

bytewax-0.18.1-cp310-cp310-manylinux_2_27_x86_64.whl (8.1 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.27+ x86-64

bytewax-0.18.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (7.8 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARMv7l

bytewax-0.18.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (8.1 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

bytewax-0.18.1-cp310-cp310-macosx_11_0_arm64.whl (5.9 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

bytewax-0.18.1-cp310-cp310-macosx_10_12_x86_64.whl (6.2 MB view details)

Uploaded CPython 3.10macOS 10.12+ x86-64

bytewax-0.18.1-cp39-none-win_amd64.whl (5.3 MB view details)

Uploaded CPython 3.9Windows x86-64

bytewax-0.18.1-cp39-cp39-manylinux_2_31_x86_64.whl (8.1 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.31+ x86-64

bytewax-0.18.1-cp39-cp39-manylinux_2_27_x86_64.whl (8.1 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.27+ x86-64

bytewax-0.18.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (7.8 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ ARMv7l

bytewax-0.18.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (8.1 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ ARM64

bytewax-0.18.1-cp39-cp39-macosx_11_0_arm64.whl (5.9 MB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

bytewax-0.18.1-cp39-cp39-macosx_10_12_x86_64.whl (6.2 MB view details)

Uploaded CPython 3.9macOS 10.12+ x86-64

bytewax-0.18.1-cp38-none-win_amd64.whl (5.3 MB view details)

Uploaded CPython 3.8Windows x86-64

bytewax-0.18.1-cp38-cp38-manylinux_2_31_x86_64.whl (8.1 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.31+ x86-64

bytewax-0.18.1-cp38-cp38-manylinux_2_27_x86_64.whl (8.0 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.27+ x86-64

bytewax-0.18.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (7.8 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ ARMv7l

bytewax-0.18.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (8.0 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ ARM64

bytewax-0.18.1-cp38-cp38-macosx_11_0_arm64.whl (5.9 MB view details)

Uploaded CPython 3.8macOS 11.0+ ARM64

bytewax-0.18.1-cp38-cp38-macosx_10_12_x86_64.whl (6.1 MB view details)

Uploaded CPython 3.8macOS 10.12+ x86-64

File details

Details for the file bytewax-0.18.1-cp311-none-win_amd64.whl.

File metadata

  • Download URL: bytewax-0.18.1-cp311-none-win_amd64.whl
  • Upload date:
  • Size: 5.3 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.18

File hashes

Hashes for bytewax-0.18.1-cp311-none-win_amd64.whl
Algorithm Hash digest
SHA256 0035a32e255215d76dea4de0a9305bd36112a6777c0f7829e5dd3e0e68f50edc
MD5 f6c4d62ca8a107ed49171b38fa02fee9
BLAKE2b-256 ca39fdbc559704a996b9668c3e8b5eaa39fc31d34c2e459cc7b06103b25c38f2

See more details on using hashes here.

File details

Details for the file bytewax-0.18.1-cp311-cp311-manylinux_2_31_x86_64.whl.

File metadata

File hashes

Hashes for bytewax-0.18.1-cp311-cp311-manylinux_2_31_x86_64.whl
Algorithm Hash digest
SHA256 e4e9cad1d99d0026517ae4b61abfce7c54c8c009d0bdd31f7138b27706474480
MD5 57a0a7e43c59eff8cb7ef7dd2d815d3e
BLAKE2b-256 157ff01c5b9172af213762c29da19dc88ffe1a05e1dc4852250f13ae7792e482

See more details on using hashes here.

File details

Details for the file bytewax-0.18.1-cp311-cp311-manylinux_2_27_x86_64.whl.

File metadata

File hashes

Hashes for bytewax-0.18.1-cp311-cp311-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 78000661a7cdb3ea48c7b27dd66676d9277ab8d4c0af07a3881572b7e0635088
MD5 3c3dedc4648d964b78243783f21e3746
BLAKE2b-256 d163a4a7c0d0ac950390d3b8ceb499ee4e3c127849ff6a20a03d3788d7b34776

See more details on using hashes here.

File details

Details for the file bytewax-0.18.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for bytewax-0.18.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 cd74639cdb1ee0f124578b3a7521d868f1df81c8a66f7f8528f68362a2df6ea1
MD5 262cca73a550b79e5a876688c57e7185
BLAKE2b-256 3283f46ac76dd73fb372f1c5e299f3a480bf87811d92f6a628a171f739340b6c

See more details on using hashes here.

File details

Details for the file bytewax-0.18.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for bytewax-0.18.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 6c821374f2a598620ab1f4b66cd8d0f4bce6cac83c8c04bb317293cb87b8707b
MD5 6413498b1cf9e4acf90890c4598429ef
BLAKE2b-256 614bb00f4825072b229f86c20cd419ae5919064a3471762cf5ae742a32afa0ef

See more details on using hashes here.

File details

Details for the file bytewax-0.18.1-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for bytewax-0.18.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3187b19b68292a138d2329130783d14a237410ccb88cb8136b0fdb21ac13abdb
MD5 f7eff39f19f7d13a26347f4fe0dc7602
BLAKE2b-256 51c78be4304d949999b2aab07c4d47083f129b3f037e9b7cf189c6874d0e5780

See more details on using hashes here.

File details

Details for the file bytewax-0.18.1-cp311-cp311-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for bytewax-0.18.1-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 e7ac99ace66b6f0b27445567e54dc7efd4b0dfae4b45bcc2cd476410f67adf0b
MD5 a610457f13f70c56785d2f9b251f30b0
BLAKE2b-256 76ad4d956fa157046f50cc4f23758ec1cf159903abe37c0eee5a7f570e81142d

See more details on using hashes here.

File details

Details for the file bytewax-0.18.1-cp310-none-win_amd64.whl.

File metadata

  • Download URL: bytewax-0.18.1-cp310-none-win_amd64.whl
  • Upload date:
  • Size: 5.3 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.18

File hashes

Hashes for bytewax-0.18.1-cp310-none-win_amd64.whl
Algorithm Hash digest
SHA256 ffdf4d0ad2e4564cfd02bd111207559acd972dec2535e17788d799f557fecb1c
MD5 022dca1f80e80ba33d28838c62ebefcc
BLAKE2b-256 0ddf21136efe4ec6eebaffff50bcc995b6cb36eae9dc181bcfb6964e55b01a5d

See more details on using hashes here.

File details

Details for the file bytewax-0.18.1-cp310-cp310-manylinux_2_31_x86_64.whl.

File metadata

File hashes

Hashes for bytewax-0.18.1-cp310-cp310-manylinux_2_31_x86_64.whl
Algorithm Hash digest
SHA256 a5d91b5f72cb8e84f37371c17f6d93c3733cc1db95601103d4fe0b0125907f2b
MD5 eef2389f309c76715a5bbe08907c5621
BLAKE2b-256 02a50144a00a6df5d10ab517d090e2dabbbd57209a92e40ea4650103c196d2bb

See more details on using hashes here.

File details

Details for the file bytewax-0.18.1-cp310-cp310-manylinux_2_27_x86_64.whl.

File metadata

File hashes

Hashes for bytewax-0.18.1-cp310-cp310-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 eb4a05fe3fdee36b388fd570e85860bedc4570cf5d3464652cd235ecbc8d0a25
MD5 390e9ee59fd5e81c168b0398efba06b2
BLAKE2b-256 104a4dc02cd5b8cd66b183ab33e20427e77e9c43570460b17864591b445fc460

See more details on using hashes here.

File details

Details for the file bytewax-0.18.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for bytewax-0.18.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 465f384a86a30874d11dfc6f409ea6cc6ca549109bdcad307e05faa4ae477da0
MD5 767437b13bff739dd097efd84d53d659
BLAKE2b-256 6f38112c69254bcca43bc1d5410e18ead58f0d44c8ca6fb987286c6eb09287b3

See more details on using hashes here.

File details

Details for the file bytewax-0.18.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for bytewax-0.18.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 fa95371da73c4090fde063cf44d2eb523b131c6390b0cd8b428eb8df045f3417
MD5 1337ede998b0f3a621ef72d6aebb4597
BLAKE2b-256 7daa6842be44834676c627444384d5de100ad1ed6253d2d5e27cd065c00a918c

See more details on using hashes here.

File details

Details for the file bytewax-0.18.1-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for bytewax-0.18.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 18d64f45941482264250e0f74a7d54b77214ad47404e494bde341b9a44cf9e4b
MD5 c5efbf44bae45cd2cddb679f3e4226a6
BLAKE2b-256 760472fe6400c9e1a0aef2edf42ffca406fd4c25503584ed53a86cf7544263b4

See more details on using hashes here.

File details

Details for the file bytewax-0.18.1-cp310-cp310-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for bytewax-0.18.1-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 193b5d3e98c00eb5b64343eb590a9fa0555b339125329c2a1c27c15db8353cff
MD5 ebe2316bcd781938cb3c98776df72c0b
BLAKE2b-256 49e6f5a71816afab35292f5e0abe77c36e6721aade1a3177302b28db15e48ab4

See more details on using hashes here.

File details

Details for the file bytewax-0.18.1-cp39-none-win_amd64.whl.

File metadata

  • Download URL: bytewax-0.18.1-cp39-none-win_amd64.whl
  • Upload date:
  • Size: 5.3 MB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.18

File hashes

Hashes for bytewax-0.18.1-cp39-none-win_amd64.whl
Algorithm Hash digest
SHA256 69acee47ed480f0d6c164ad8fb29f445ae758b0784ec11629bf4bec5222c7c10
MD5 c798bdf338ced566bbd398355bb83cda
BLAKE2b-256 7ce531c6a677e60f3380ed9caa629a5a312560f15a6840e36dd787ff998fdf42

See more details on using hashes here.

File details

Details for the file bytewax-0.18.1-cp39-cp39-manylinux_2_31_x86_64.whl.

File metadata

File hashes

Hashes for bytewax-0.18.1-cp39-cp39-manylinux_2_31_x86_64.whl
Algorithm Hash digest
SHA256 5e07fb7c16b7f45a4aa27733ac5ebdc434fea70d217d727a83808c871d87b417
MD5 3b0fee0d38925631744e275182a3c351
BLAKE2b-256 85a16a9e17b5935a1e5d8134799fe4453dee096330e4644e723e35e19a6ad138

See more details on using hashes here.

File details

Details for the file bytewax-0.18.1-cp39-cp39-manylinux_2_27_x86_64.whl.

File metadata

File hashes

Hashes for bytewax-0.18.1-cp39-cp39-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 674907a655140cd96141613e3e7fadeb949073b631357e735afb9d61ec5efc33
MD5 6905fbe2b7dc36afa21dcc264f5413fa
BLAKE2b-256 dce5870cf34711feff5945f67b8adfd29ab3e9c8da4b561ea2f9587c98238d04

See more details on using hashes here.

File details

Details for the file bytewax-0.18.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for bytewax-0.18.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 82a0ddea8ccfcac2010e1caa03aa9b8168c3b75a9408d4ba2444651b3ae141e8
MD5 8171caf67dbb72db6a15132812254bd7
BLAKE2b-256 dca58900ddbb096b31c77b2e826d1b9536b0eb36537d75c810215576d916a738

See more details on using hashes here.

File details

Details for the file bytewax-0.18.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for bytewax-0.18.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 de2f11ef84fb4cd5a80760fa3878907e6e475c15cfa3c274f190b273ffa8bb80
MD5 1bd9a26af179ece9c81d412d519e47ce
BLAKE2b-256 54cd776f3d8888869b425ae2103911e2200451012b258db9ca4023775b9f5dda

See more details on using hashes here.

File details

Details for the file bytewax-0.18.1-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for bytewax-0.18.1-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 246b2fe0cc29da132df6115ee3660101231a928f422a7613a4279a9848d7ed2a
MD5 14bfd955a1db75aaa9f9200d70975461
BLAKE2b-256 76b7d5a9378f02253c32f57593824b27282df4c46b38e69202705e16575be60d

See more details on using hashes here.

File details

Details for the file bytewax-0.18.1-cp39-cp39-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for bytewax-0.18.1-cp39-cp39-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 508b330c976cf93d2edd4defce1298c87e73563c9a276496631839a985407f5d
MD5 99c20f76c5d96bb9601466835d6e3888
BLAKE2b-256 f5248bc9844121ae537a31e274222c081bf937894969c2842fe3af33b4003651

See more details on using hashes here.

File details

Details for the file bytewax-0.18.1-cp38-none-win_amd64.whl.

File metadata

  • Download URL: bytewax-0.18.1-cp38-none-win_amd64.whl
  • Upload date:
  • Size: 5.3 MB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.18

File hashes

Hashes for bytewax-0.18.1-cp38-none-win_amd64.whl
Algorithm Hash digest
SHA256 325c75af305765f789f1ebea0b1f65b586a41ecbb6a6b172d5dc728c6fcaae8b
MD5 1b62fdbfa7fd0c2f6eb6f3785e7bf1ba
BLAKE2b-256 ae8b609aaa1a51a262c955bac0a6bc1b72959621ca2dbb63a135b36921a77be9

See more details on using hashes here.

File details

Details for the file bytewax-0.18.1-cp38-cp38-manylinux_2_31_x86_64.whl.

File metadata

File hashes

Hashes for bytewax-0.18.1-cp38-cp38-manylinux_2_31_x86_64.whl
Algorithm Hash digest
SHA256 40a260d084a276604c59a31e6ebb523312c9255cc7ccc33412c499c6afbed1a7
MD5 d538b8287c461a0171b00fc95f7adffc
BLAKE2b-256 86d92457dbe83c486dbaecc5603ac8b182d81fa91731f502ed03348912305a02

See more details on using hashes here.

File details

Details for the file bytewax-0.18.1-cp38-cp38-manylinux_2_27_x86_64.whl.

File metadata

File hashes

Hashes for bytewax-0.18.1-cp38-cp38-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 7897ef04560d6cf69f6a37a5d1d1e488531714937b97d213060864d035ffe8ea
MD5 cb3fc15bcef97ced4fe854e3b9c689c6
BLAKE2b-256 868014f99f5ed562bc3d22e094f6cb30f24d2137936595af37c9077eee2a1f24

See more details on using hashes here.

File details

Details for the file bytewax-0.18.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for bytewax-0.18.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 a592efb1fac5ee81c240cbc871e000d9199c00b2c10bcc5550b48f17d1433c70
MD5 373ac3ecc57024c59730227df347527c
BLAKE2b-256 91771df3f1fe66f2e77814c8485bf5a36e4d10e0e6a9f42625cc90f3a6d464a6

See more details on using hashes here.

File details

Details for the file bytewax-0.18.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for bytewax-0.18.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 61c9dfc1c4576a8266303216b6e0b822bd09d317202a1784b0214568147ff973
MD5 73610b5c267de11acf57c7f80400f6b2
BLAKE2b-256 fc98c74109051bcc7a6f40f318c141ea286a3387b8a6a115fb23d54b86299da9

See more details on using hashes here.

File details

Details for the file bytewax-0.18.1-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for bytewax-0.18.1-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c7af5369a922a2ea988eaafa0cc0ab97fd9810c9bfbab5d366a7f70c90ba1bac
MD5 3baf2e37bcd5cc43a5d90be3c6daa93c
BLAKE2b-256 9aa59c0c733e4d6c47c631d5f206068b6a28ee4751e877599745d0e3c2677a9e

See more details on using hashes here.

File details

Details for the file bytewax-0.18.1-cp38-cp38-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for bytewax-0.18.1-cp38-cp38-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 bfe922c7286509902e580b5134d6e8cb64f3b48831d674abc12f125e72892195
MD5 bcd286b880945bb026506ff1316064bf
BLAKE2b-256 b665a16a3f975f35caa790a16695b955d2d72da2e8c2351bc24783d9d8fd861f

See more details on using hashes here.

Supported by

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