Skip to main content

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. Bytewax Dataflow Animation

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.

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
import bytewax.operators.windowing as win
from bytewax.operators.windowing import EventClock, TumblingWindower
from bytewax.testing import TestingSource

flow = Dataflow("window_eg")

src = [
    {"user_id": "123", "value": 5, "time": "2023-1-1T00:00:00Z"},
    {"user_id": "123", "value": 7, "time": "2023-1-1T00:00:01Z"},
    {"user_id": "123", "value": 2, "time": "2023-1-1T00:00:07Z"},
]
inp = op.input("inp", flow, TestingSource(src))
keyed_inp = op.key_on("keyed_inp", inp, lambda x: x["user_id"])


# 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.
clock = EventClock(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)
windower = TumblingWindower(align_to=align_to, length=timedelta(seconds=5))

five_sec_buckets_win_out = win.collect_window(
    "five_sec_buckets", keyed_inp, clock, windower
)


def calc_avg(bucket):
    values = [event["value"] for event in bucket]
    if len(values) > 0:
        return sum(values) / len(values)
    else:
        return None


five_sec_avgs = op.map_value("avg_in_bucket", five_sec_buckets_win_out.down, calc_avg)

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 heterogeneous 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.

% skip: next

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(step_id, 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 community Slack for discussions.

Code of Conduct

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 Guide for how to get started.



With ❤️ Bytewax

Metadata

Release files for bytewax 0.20.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distributions (wheels)

Table of built distributions (wheels) for bytewax 0.20.0
File
bytewax-0.20.0-cp312-none-win_amd64.whl CPython 3.12 none Windows x86-64 Details
bytewax-0.20.0-cp312-cp312-manylinux_2_31_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.31+ x86-64 Details
bytewax-0.20.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ ARMv7l Details
bytewax-0.20.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ ARM64 Details
bytewax-0.20.0-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details
bytewax-0.20.0-cp312-cp312-macosx_10_12_x86_64.whl CPython 3.12 CPython 3.12 macOS 10.12+ x86-64 Details
bytewax-0.20.0-cp311-none-win_amd64.whl CPython 3.11 none Windows x86-64 Details
bytewax-0.20.0-cp311-cp311-manylinux_2_31_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.31+ x86-64 Details
bytewax-0.20.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl CPython 3.11 CPython 3.11 Linux glibc 2.17+ ARMv7l Details
bytewax-0.20.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.11 CPython 3.11 Linux glibc 2.17+ ARM64 Details
bytewax-0.20.0-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details
bytewax-0.20.0-cp311-cp311-macosx_10_12_x86_64.whl CPython 3.11 CPython 3.11 macOS 10.12+ x86-64 Details
bytewax-0.20.0-cp310-none-win_amd64.whl CPython 3.10 none Windows x86-64 Details
bytewax-0.20.0-cp310-cp310-manylinux_2_31_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.31+ x86-64 Details
bytewax-0.20.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl CPython 3.10 CPython 3.10 Linux glibc 2.17+ ARMv7l Details
bytewax-0.20.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.10 CPython 3.10 Linux glibc 2.17+ ARM64 Details
bytewax-0.20.0-cp310-cp310-macosx_11_0_arm64.whl CPython 3.10 CPython 3.10 macOS 11.0+ ARM64 Details
bytewax-0.20.0-cp310-cp310-macosx_10_12_x86_64.whl CPython 3.10 CPython 3.10 macOS 10.12+ x86-64 Details
bytewax-0.20.0-cp39-none-win_amd64.whl CPython 3.9 none Windows x86-64 Details
bytewax-0.20.0-cp39-cp39-manylinux_2_31_x86_64.whl CPython 3.9 CPython 3.9 Linux glibc 2.31+ x86-64 Details
bytewax-0.20.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl CPython 3.9 CPython 3.9 Linux glibc 2.17+ ARMv7l Details
bytewax-0.20.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.9 CPython 3.9 Linux glibc 2.17+ ARM64 Details
bytewax-0.20.0-cp39-cp39-macosx_11_0_arm64.whl CPython 3.9 CPython 3.9 macOS 11.0+ ARM64 Details
bytewax-0.20.0-cp39-cp39-macosx_10_12_x86_64.whl CPython 3.9 CPython 3.9 macOS 10.12+ x86-64 Details
bytewax-0.20.0-cp38-none-win_amd64.whl CPython 3.8 none Windows x86-64 Details
bytewax-0.20.0-cp38-cp38-manylinux_2_31_x86_64.whl CPython 3.8 CPython 3.8 Linux glibc 2.31+ x86-64 Details
bytewax-0.20.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl CPython 3.8 CPython 3.8 Linux glibc 2.17+ ARMv7l Details
bytewax-0.20.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.8 CPython 3.8 Linux glibc 2.17+ ARM64 Details
bytewax-0.20.0-cp38-cp38-macosx_11_0_arm64.whl CPython 3.8 CPython 3.8 macOS 11.0+ ARM64 Details
bytewax-0.20.0-cp38-cp38-macosx_10_12_x86_64.whl CPython 3.8 CPython 3.8 macOS 10.12+ x86-64 Details

Total release size: 204.9 MB

Release files / bytewax-0.20.0-cp312-none-win_amd64.whl

Download URL bytewax-0.20.0-cp312-none-win_amd64.whl
Size 5.2 MB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
14eec7e8021b6ba232c9343ec6e666c2b848e885bc2f0f8bc189b16c6110b0f5
BLAKE2b-256 checksum
How to use checksums
e4893f42f7b2d7d07fe53262fd7d71207e2df8fe1573c346993c35cb51b1c48c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.0 CPython/3.9.19

Release files / bytewax-0.20.0-cp312-cp312-manylinux_2_31_x86_64.whl

Download URL bytewax-0.20.0-cp312-cp312-manylinux_2_31_x86_64.whl
Size 8.0 MB
Tags CPython 3.12 Linux glibc 2.31+ x86-64
SHA-256 checksum
How to use checksums
8c8eb49be5639626f41484794877ea70b89fe6eee0f3f71281776c07c716af14
BLAKE2b-256 checksum
How to use checksums
2f4ade00450e9a83b980fb9b299249b8c48d9d4fce5418966c16f56188c4b199
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.0 CPython/3.9.19

Release files / bytewax-0.20.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl

Download URL bytewax-0.20.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Size 7.7 MB
Tags CPython 3.12 Linux glibc 2.17+ ARMv7l
SHA-256 checksum
How to use checksums
f3305174f02a9e20b81437c6e58e225d5116f8ba26fd3fe58e2d6ab54adf148e
BLAKE2b-256 checksum
How to use checksums
b70ba6d60cf3dbb6761ae86c7bc14f35cd322c6fb5e39b8cad11c79a0d4c922a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.0 CPython/3.9.19

Release files / bytewax-0.20.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL bytewax-0.20.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 8.0 MB
Tags CPython 3.12 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
4eebaf19698bc72838d7aee5ebe4a5678c3a34834686637deabe60cbea0fe71d
BLAKE2b-256 checksum
How to use checksums
cffe42bd53d35c3ba978bddebeedbdcf5a6794e7713dc59c23f6c7ffeb01cfa0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.0 CPython/3.9.19

Release files / bytewax-0.20.0-cp312-cp312-macosx_11_0_arm64.whl

Download URL bytewax-0.20.0-cp312-cp312-macosx_11_0_arm64.whl
Size 6.1 MB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
a6833715fde212079bb05fb01d5378d6ea5da517f40d73e70093b7ea6cb3cb75
BLAKE2b-256 checksum
How to use checksums
0966f65133f5e751f4ba8d4320ee097826cb7308d84b599247f8136cc0a3d772
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.0 CPython/3.9.19

Release files / bytewax-0.20.0-cp312-cp312-macosx_10_12_x86_64.whl

Download URL bytewax-0.20.0-cp312-cp312-macosx_10_12_x86_64.whl
Size 6.2 MB
Tags CPython 3.12 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
da9db4168aca400afad2cb2bb65114530b144d9c0d998f7135fd4815a4774b28
BLAKE2b-256 checksum
How to use checksums
f8f62b2794b5c624425b7cbb3217b6ef79f151d12ff377ea8332d46988c021ac
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.0 CPython/3.9.19

Release files / bytewax-0.20.0-cp311-none-win_amd64.whl

Download URL bytewax-0.20.0-cp311-none-win_amd64.whl
Size 5.2 MB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
9af588a5fad11b81b6d94c8bc8b766917c2e12ec4d28b56897ab2d615e875504
BLAKE2b-256 checksum
How to use checksums
2281c0bd2950e17366ff505d668771f264e7450f97d7313bc5ba0b68bcd30024
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.0 CPython/3.9.19

Release files / bytewax-0.20.0-cp311-cp311-manylinux_2_31_x86_64.whl

Download URL bytewax-0.20.0-cp311-cp311-manylinux_2_31_x86_64.whl
Size 8.0 MB
Tags CPython 3.11 Linux glibc 2.31+ x86-64
SHA-256 checksum
How to use checksums
24bf84feb6f9f760fee5051fdf2a1d5938e85c916b4843fcea4abf58befcb4da
BLAKE2b-256 checksum
How to use checksums
c28d1bdec924a788a2b7874fdb3bbf8c9ed6a8ca2f3b5ce2ad9cba2518b640fd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.0 CPython/3.9.19

Release files / bytewax-0.20.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl

Download URL bytewax-0.20.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Size 7.7 MB
Tags CPython 3.11 Linux glibc 2.17+ ARMv7l
SHA-256 checksum
How to use checksums
d4c182205c9141b4920f65b5a6d7ee99bf6d22c1888e62966e83ed1a56e3ddb5
BLAKE2b-256 checksum
How to use checksums
3ae773b8ab2c0bea9e7c126ddfa2099395e027848d083329cb22e1f6d5356da0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.0 CPython/3.9.19

Release files / bytewax-0.20.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL bytewax-0.20.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 7.9 MB
Tags CPython 3.11 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
015251cb737b2e14eb60e9d0df3d50ea897b6cb11f9619d5c60946ad2b33b1b0
BLAKE2b-256 checksum
How to use checksums
f39e236bec6adad9d7201bc7f12a1e3bd628f064f287870071bd01520d7344ff
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.0 CPython/3.9.19

Release files / bytewax-0.20.0-cp311-cp311-macosx_11_0_arm64.whl

Download URL bytewax-0.20.0-cp311-cp311-macosx_11_0_arm64.whl
Size 6.1 MB
Tags CPython 3.11 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
47ca4af864a11b654f6ea3ba330bb042c7e29034afac396bd563c1c3ffba6dbf
BLAKE2b-256 checksum
How to use checksums
ce57188e4b36c74f1d6bc236cb9a540c1b22f8d11dcbdcbaef0e44203edec132
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.0 CPython/3.9.19

Release files / bytewax-0.20.0-cp311-cp311-macosx_10_12_x86_64.whl

Download URL bytewax-0.20.0-cp311-cp311-macosx_10_12_x86_64.whl
Size 6.2 MB
Tags CPython 3.11 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
66aa96ecab8993093549b460266e6c1403d85b3b1b4daa61dd189f2ff563dd70
BLAKE2b-256 checksum
How to use checksums
f72efbf2de3f0a1bbca5ce16ff40f40c2cbe8d284673ce3322008c39a52699a1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.0 CPython/3.9.19

Release files / bytewax-0.20.0-cp310-none-win_amd64.whl

Download URL bytewax-0.20.0-cp310-none-win_amd64.whl
Size 5.2 MB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
8fa8b490861ed88bd88b3c7633671d23169f404b09d78cbc83a2a4a65d4a8f35
BLAKE2b-256 checksum
How to use checksums
668e7de5c5c5a9ba0e14cc65756e8081f2efe26a21a022d02f52a1a56dd350bc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.0 CPython/3.9.19

Release files / bytewax-0.20.0-cp310-cp310-manylinux_2_31_x86_64.whl

Download URL bytewax-0.20.0-cp310-cp310-manylinux_2_31_x86_64.whl
Size 8.0 MB
Tags CPython 3.10 Linux glibc 2.31+ x86-64
SHA-256 checksum
How to use checksums
97ef291760a3bd091b0750c6334524029f6960efb7a5c93300d41b3395b32d7f
BLAKE2b-256 checksum
How to use checksums
1a59b3eec728aae042c7a51ad00fbf5ae9c5a7f1fca5e07d814c571f225cbd9b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.0 CPython/3.9.19

Release files / bytewax-0.20.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl

Download URL bytewax-0.20.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Size 7.7 MB
Tags CPython 3.10 Linux glibc 2.17+ ARMv7l
SHA-256 checksum
How to use checksums
5419e45a29d98ffcb38f41f787b4d8287057828fcfc6d8f1222ea7f85e684202
BLAKE2b-256 checksum
How to use checksums
5bf743a8892f7486733b6ed800950a314de5c8a2a6d9e6dba801dbdac8903d1e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.0 CPython/3.9.19

Release files / bytewax-0.20.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL bytewax-0.20.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 7.9 MB
Tags CPython 3.10 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
f77054110bf965897db897c0d14a66cf1713dbf0530ef5aa2818b390bb17bb4c
BLAKE2b-256 checksum
How to use checksums
0c40079b17539559bf2671c0ddc6f9b6308a595c92a88c5708fb271bbbad2d44
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.0 CPython/3.9.19

Release files / bytewax-0.20.0-cp310-cp310-macosx_11_0_arm64.whl

Download URL bytewax-0.20.0-cp310-cp310-macosx_11_0_arm64.whl
Size 6.1 MB
Tags CPython 3.10 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
4045e38560b79b38b386dcb5a550c14937f839f10ffd49d30464e7f497dcc018
BLAKE2b-256 checksum
How to use checksums
37f9ef88b04a7dcbb36ee30a4a564431684417f4817516c0b6c9eff543b2b742
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.0 CPython/3.9.19

Release files / bytewax-0.20.0-cp310-cp310-macosx_10_12_x86_64.whl

Download URL bytewax-0.20.0-cp310-cp310-macosx_10_12_x86_64.whl
Size 6.2 MB
Tags CPython 3.10 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
96f21498a9ed3f6496d372c33f1e65a8cb5d9f209c34a63e0a52a063290e7cb7
BLAKE2b-256 checksum
How to use checksums
f58f1ce4ba6b38d54d52d59c0e4e188138974769ba613d8d680d41d3de0624aa
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.0 CPython/3.9.19

Release files / bytewax-0.20.0-cp39-none-win_amd64.whl

Download URL bytewax-0.20.0-cp39-none-win_amd64.whl
Size 5.2 MB
Tags CPython 3.9 Windows x86-64
SHA-256 checksum
How to use checksums
178a7914e166cf670bf07abf13ade8f760a2a68ddbf690aa4f9e22bc61f27342
BLAKE2b-256 checksum
How to use checksums
74d20949828cf4a7648c2d4db259ca8ecc32d2f94fefa1a7a4401b779ef23d61
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.0 CPython/3.9.19

Release files / bytewax-0.20.0-cp39-cp39-manylinux_2_31_x86_64.whl

Download URL bytewax-0.20.0-cp39-cp39-manylinux_2_31_x86_64.whl
Size 8.0 MB
Tags CPython 3.9 Linux glibc 2.31+ x86-64
SHA-256 checksum
How to use checksums
3c6b97514f00a3ae54dffea7d54c2d79c0e663602f32478f0eaaeaed05f7a0ae
BLAKE2b-256 checksum
How to use checksums
44557255c577f118724d8f1191db291f459697b5708e36da81cff6606bbe804b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.0 CPython/3.9.19

Release files / bytewax-0.20.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl

Download URL bytewax-0.20.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Size 7.7 MB
Tags CPython 3.9 Linux glibc 2.17+ ARMv7l
SHA-256 checksum
How to use checksums
b896dc3b3c8a26b42b4d83a6280084f1c101c438d7f1796124090dc0f8464ad6
BLAKE2b-256 checksum
How to use checksums
27c6ef14382910c94de895481574279fffe50a0e701196b2c5626ec1fe302339
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.0 CPython/3.9.19

Release files / bytewax-0.20.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL bytewax-0.20.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 8.0 MB
Tags CPython 3.9 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
3295ef161d1ca17f8bef51af939ef066a4e48f98aad8f60f241316ac0a1aba42
BLAKE2b-256 checksum
How to use checksums
20a6b132fd76f3faa28d117d7f26eff08da34d8c430e53bdafb692eaeee46117
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.0 CPython/3.9.19

Release files / bytewax-0.20.0-cp39-cp39-macosx_11_0_arm64.whl

Download URL bytewax-0.20.0-cp39-cp39-macosx_11_0_arm64.whl
Size 6.1 MB
Tags CPython 3.9 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
f917be096095cabcd131c5bae8fcf7c1eb761ab6993dcb7efa6f41afe3ebc8f7
BLAKE2b-256 checksum
How to use checksums
eccc7ad8945191cdd1d1a9042d3129e92ebbdcf8b6343631a1f8c50b5f9ca212
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.0 CPython/3.9.19

Release files / bytewax-0.20.0-cp39-cp39-macosx_10_12_x86_64.whl

Download URL bytewax-0.20.0-cp39-cp39-macosx_10_12_x86_64.whl
Size 6.2 MB
Tags CPython 3.9 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
1521599c1176ca3657e3e8120d61d75373527b485fe391130205bd32e3de6311
BLAKE2b-256 checksum
How to use checksums
13dd1518729da85e3e37e143ea7000ef66e0eaea4404a206f97ace999deca266
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.0 CPython/3.9.19

Release files / bytewax-0.20.0-cp38-none-win_amd64.whl

Download URL bytewax-0.20.0-cp38-none-win_amd64.whl
Size 5.2 MB
Tags CPython 3.8 Windows x86-64
SHA-256 checksum
How to use checksums
66cc2fe41be0ef5da4d2dca36c14c718aeaa32773563e647c669e450b229e94e
BLAKE2b-256 checksum
How to use checksums
552329f023c44eeb831230c8a0d3258d3077cf434130dc15349e338f7a5fee82
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.0 CPython/3.9.19

Release files / bytewax-0.20.0-cp38-cp38-manylinux_2_31_x86_64.whl

Download URL bytewax-0.20.0-cp38-cp38-manylinux_2_31_x86_64.whl
Size 8.0 MB
Tags CPython 3.8 Linux glibc 2.31+ x86-64
SHA-256 checksum
How to use checksums
ea4ca4f89f8d97c0b22930e072e160694ef567a07018de13cfa7f9c118077e7c
BLAKE2b-256 checksum
How to use checksums
db1a6dc3b3258624d00d787bbb06d6ccf778e63f699129e090922ab0cbb220ed
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.0 CPython/3.9.19

Release files / bytewax-0.20.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl

Download URL bytewax-0.20.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Size 7.7 MB
Tags CPython 3.8 Linux glibc 2.17+ ARMv7l
SHA-256 checksum
How to use checksums
fcb772ad9fce32d0ff255d7b5982ed6c24c0ae7192a46045ddb2fc313ab5a17e
BLAKE2b-256 checksum
How to use checksums
caf43f1786e36a78d75cba5cece8f75a8ab9866f403b0da3f59b1df9f4356ec6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.0 CPython/3.9.19

Release files / bytewax-0.20.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL bytewax-0.20.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 8.0 MB
Tags CPython 3.8 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
633185d725d48dfbcda8687bc8ef5c311fe2ed1afac609fb90e2acbd035f490d
BLAKE2b-256 checksum
How to use checksums
81ac17fa4a7a0d74adaa87b0a8a5a227ecf8ea740550109102b0fe4be83abd81
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.0 CPython/3.9.19

Release files / bytewax-0.20.0-cp38-cp38-macosx_11_0_arm64.whl

Download URL bytewax-0.20.0-cp38-cp38-macosx_11_0_arm64.whl
Size 6.1 MB
Tags CPython 3.8 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
d546cb7fd830272ac30c3d30be3e83a71c031f7262ead269ae96c218540c27b7
BLAKE2b-256 checksum
How to use checksums
dcbd984abd528dbe7bdf695bab8c8f43eca09caa4436a0a219ec544f02a261eb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.0 CPython/3.9.19

Release files / bytewax-0.20.0-cp38-cp38-macosx_10_12_x86_64.whl

Download URL bytewax-0.20.0-cp38-cp38-macosx_10_12_x86_64.whl
Size 6.2 MB
Tags CPython 3.8 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
67d2d968a518b0d1fbcc0526aaa34a9aabb92f498c5157c082e0d86563159eac
BLAKE2b-256 checksum
How to use checksums
bdf5c47486989d7b9a364b99815c3496fbcc0540fef32ef2bffc21108f504204
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.0 CPython/3.9.19
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page