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.

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

Metadata

Release files for bytewax 0.18.1

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.18.1
File
bytewax-0.18.1-cp311-none-win_amd64.whl CPython 3.11 none Windows x86-64 Details
bytewax-0.18.1-cp311-cp311-manylinux_2_31_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.31+ x86-64 Details
bytewax-0.18.1-cp311-cp311-manylinux_2_27_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.27+ x86-64 Details
bytewax-0.18.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl CPython 3.11 CPython 3.11 Linux glibc 2.17+ ARMv7l Details
bytewax-0.18.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.11 CPython 3.11 Linux glibc 2.17+ ARM64 Details
bytewax-0.18.1-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details
bytewax-0.18.1-cp311-cp311-macosx_10_12_x86_64.whl CPython 3.11 CPython 3.11 macOS 10.12+ x86-64 Details
bytewax-0.18.1-cp310-none-win_amd64.whl CPython 3.10 none Windows x86-64 Details
bytewax-0.18.1-cp310-cp310-manylinux_2_31_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.31+ x86-64 Details
bytewax-0.18.1-cp310-cp310-manylinux_2_27_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.27+ x86-64 Details
bytewax-0.18.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl CPython 3.10 CPython 3.10 Linux glibc 2.17+ ARMv7l Details
bytewax-0.18.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.10 CPython 3.10 Linux glibc 2.17+ ARM64 Details
bytewax-0.18.1-cp310-cp310-macosx_11_0_arm64.whl CPython 3.10 CPython 3.10 macOS 11.0+ ARM64 Details
bytewax-0.18.1-cp310-cp310-macosx_10_12_x86_64.whl CPython 3.10 CPython 3.10 macOS 10.12+ x86-64 Details
bytewax-0.18.1-cp39-none-win_amd64.whl CPython 3.9 none Windows x86-64 Details
bytewax-0.18.1-cp39-cp39-manylinux_2_31_x86_64.whl CPython 3.9 CPython 3.9 Linux glibc 2.31+ x86-64 Details
bytewax-0.18.1-cp39-cp39-manylinux_2_27_x86_64.whl CPython 3.9 CPython 3.9 Linux glibc 2.27+ x86-64 Details
bytewax-0.18.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl CPython 3.9 CPython 3.9 Linux glibc 2.17+ ARMv7l Details
bytewax-0.18.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.9 CPython 3.9 Linux glibc 2.17+ ARM64 Details
bytewax-0.18.1-cp39-cp39-macosx_11_0_arm64.whl CPython 3.9 CPython 3.9 macOS 11.0+ ARM64 Details
bytewax-0.18.1-cp39-cp39-macosx_10_12_x86_64.whl CPython 3.9 CPython 3.9 macOS 10.12+ x86-64 Details
bytewax-0.18.1-cp38-none-win_amd64.whl CPython 3.8 none Windows x86-64 Details
bytewax-0.18.1-cp38-cp38-manylinux_2_31_x86_64.whl CPython 3.8 CPython 3.8 Linux glibc 2.31+ x86-64 Details
bytewax-0.18.1-cp38-cp38-manylinux_2_27_x86_64.whl CPython 3.8 CPython 3.8 Linux glibc 2.27+ x86-64 Details
bytewax-0.18.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl CPython 3.8 CPython 3.8 Linux glibc 2.17+ ARMv7l Details
bytewax-0.18.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.8 CPython 3.8 Linux glibc 2.17+ ARM64 Details
bytewax-0.18.1-cp38-cp38-macosx_11_0_arm64.whl CPython 3.8 CPython 3.8 macOS 11.0+ ARM64 Details
bytewax-0.18.1-cp38-cp38-macosx_10_12_x86_64.whl CPython 3.8 CPython 3.8 macOS 10.12+ x86-64 Details

Total release size: 197.3 MB

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

Download URL bytewax-0.18.1-cp311-none-win_amd64.whl
Size 5.3 MB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
0035a32e255215d76dea4de0a9305bd36112a6777c0f7829e5dd3e0e68f50edc
BLAKE2b-256 checksum
How to use checksums
ca39fdbc559704a996b9668c3e8b5eaa39fc31d34c2e459cc7b06103b25c38f2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.18

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

Download URL bytewax-0.18.1-cp311-cp311-manylinux_2_31_x86_64.whl
Size 8.1 MB
Tags CPython 3.11 Linux glibc 2.31+ x86-64
SHA-256 checksum
How to use checksums
e4e9cad1d99d0026517ae4b61abfce7c54c8c009d0bdd31f7138b27706474480
BLAKE2b-256 checksum
How to use checksums
157ff01c5b9172af213762c29da19dc88ffe1a05e1dc4852250f13ae7792e482
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.18

Release files / bytewax-0.18.1-cp311-cp311-manylinux_2_27_x86_64.whl

Download URL bytewax-0.18.1-cp311-cp311-manylinux_2_27_x86_64.whl
Size 8.1 MB
Tags CPython 3.11 Linux glibc 2.27+ x86-64
SHA-256 checksum
How to use checksums
78000661a7cdb3ea48c7b27dd66676d9277ab8d4c0af07a3881572b7e0635088
BLAKE2b-256 checksum
How to use checksums
d163a4a7c0d0ac950390d3b8ceb499ee4e3c127849ff6a20a03d3788d7b34776
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.18

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

Download URL bytewax-0.18.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Size 7.8 MB
Tags CPython 3.11 Linux glibc 2.17+ ARMv7l
SHA-256 checksum
How to use checksums
cd74639cdb1ee0f124578b3a7521d868f1df81c8a66f7f8528f68362a2df6ea1
BLAKE2b-256 checksum
How to use checksums
3283f46ac76dd73fb372f1c5e299f3a480bf87811d92f6a628a171f739340b6c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.18

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

Download URL bytewax-0.18.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 8.1 MB
Tags CPython 3.11 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
6c821374f2a598620ab1f4b66cd8d0f4bce6cac83c8c04bb317293cb87b8707b
BLAKE2b-256 checksum
How to use checksums
614bb00f4825072b229f86c20cd419ae5919064a3471762cf5ae742a32afa0ef
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.18

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

Download URL bytewax-0.18.1-cp311-cp311-macosx_11_0_arm64.whl
Size 5.9 MB
Tags CPython 3.11 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
3187b19b68292a138d2329130783d14a237410ccb88cb8136b0fdb21ac13abdb
BLAKE2b-256 checksum
How to use checksums
51c78be4304d949999b2aab07c4d47083f129b3f037e9b7cf189c6874d0e5780
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.18

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

Download URL bytewax-0.18.1-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
e7ac99ace66b6f0b27445567e54dc7efd4b0dfae4b45bcc2cd476410f67adf0b
BLAKE2b-256 checksum
How to use checksums
76ad4d956fa157046f50cc4f23758ec1cf159903abe37c0eee5a7f570e81142d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.18

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

Download URL bytewax-0.18.1-cp310-none-win_amd64.whl
Size 5.3 MB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
ffdf4d0ad2e4564cfd02bd111207559acd972dec2535e17788d799f557fecb1c
BLAKE2b-256 checksum
How to use checksums
0ddf21136efe4ec6eebaffff50bcc995b6cb36eae9dc181bcfb6964e55b01a5d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.18

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

Download URL bytewax-0.18.1-cp310-cp310-manylinux_2_31_x86_64.whl
Size 8.1 MB
Tags CPython 3.10 Linux glibc 2.31+ x86-64
SHA-256 checksum
How to use checksums
a5d91b5f72cb8e84f37371c17f6d93c3733cc1db95601103d4fe0b0125907f2b
BLAKE2b-256 checksum
How to use checksums
02a50144a00a6df5d10ab517d090e2dabbbd57209a92e40ea4650103c196d2bb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.18

Release files / bytewax-0.18.1-cp310-cp310-manylinux_2_27_x86_64.whl

Download URL bytewax-0.18.1-cp310-cp310-manylinux_2_27_x86_64.whl
Size 8.1 MB
Tags CPython 3.10 Linux glibc 2.27+ x86-64
SHA-256 checksum
How to use checksums
eb4a05fe3fdee36b388fd570e85860bedc4570cf5d3464652cd235ecbc8d0a25
BLAKE2b-256 checksum
How to use checksums
104a4dc02cd5b8cd66b183ab33e20427e77e9c43570460b17864591b445fc460
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.18

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

Download URL bytewax-0.18.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Size 7.8 MB
Tags CPython 3.10 Linux glibc 2.17+ ARMv7l
SHA-256 checksum
How to use checksums
465f384a86a30874d11dfc6f409ea6cc6ca549109bdcad307e05faa4ae477da0
BLAKE2b-256 checksum
How to use checksums
6f38112c69254bcca43bc1d5410e18ead58f0d44c8ca6fb987286c6eb09287b3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.18

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

Download URL bytewax-0.18.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 8.1 MB
Tags CPython 3.10 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
fa95371da73c4090fde063cf44d2eb523b131c6390b0cd8b428eb8df045f3417
BLAKE2b-256 checksum
How to use checksums
7daa6842be44834676c627444384d5de100ad1ed6253d2d5e27cd065c00a918c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.18

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

Download URL bytewax-0.18.1-cp310-cp310-macosx_11_0_arm64.whl
Size 5.9 MB
Tags CPython 3.10 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
18d64f45941482264250e0f74a7d54b77214ad47404e494bde341b9a44cf9e4b
BLAKE2b-256 checksum
How to use checksums
760472fe6400c9e1a0aef2edf42ffca406fd4c25503584ed53a86cf7544263b4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.18

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

Download URL bytewax-0.18.1-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
193b5d3e98c00eb5b64343eb590a9fa0555b339125329c2a1c27c15db8353cff
BLAKE2b-256 checksum
How to use checksums
49e6f5a71816afab35292f5e0abe77c36e6721aade1a3177302b28db15e48ab4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.18

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

Download URL bytewax-0.18.1-cp39-none-win_amd64.whl
Size 5.3 MB
Tags CPython 3.9 Windows x86-64
SHA-256 checksum
How to use checksums
69acee47ed480f0d6c164ad8fb29f445ae758b0784ec11629bf4bec5222c7c10
BLAKE2b-256 checksum
How to use checksums
7ce531c6a677e60f3380ed9caa629a5a312560f15a6840e36dd787ff998fdf42
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.18

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

Download URL bytewax-0.18.1-cp39-cp39-manylinux_2_31_x86_64.whl
Size 8.1 MB
Tags CPython 3.9 Linux glibc 2.31+ x86-64
SHA-256 checksum
How to use checksums
5e07fb7c16b7f45a4aa27733ac5ebdc434fea70d217d727a83808c871d87b417
BLAKE2b-256 checksum
How to use checksums
85a16a9e17b5935a1e5d8134799fe4453dee096330e4644e723e35e19a6ad138
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.18

Release files / bytewax-0.18.1-cp39-cp39-manylinux_2_27_x86_64.whl

Download URL bytewax-0.18.1-cp39-cp39-manylinux_2_27_x86_64.whl
Size 8.1 MB
Tags CPython 3.9 Linux glibc 2.27+ x86-64
SHA-256 checksum
How to use checksums
674907a655140cd96141613e3e7fadeb949073b631357e735afb9d61ec5efc33
BLAKE2b-256 checksum
How to use checksums
dce5870cf34711feff5945f67b8adfd29ab3e9c8da4b561ea2f9587c98238d04
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.18

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

Download URL bytewax-0.18.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Size 7.8 MB
Tags CPython 3.9 Linux glibc 2.17+ ARMv7l
SHA-256 checksum
How to use checksums
82a0ddea8ccfcac2010e1caa03aa9b8168c3b75a9408d4ba2444651b3ae141e8
BLAKE2b-256 checksum
How to use checksums
dca58900ddbb096b31c77b2e826d1b9536b0eb36537d75c810215576d916a738
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.18

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

Download URL bytewax-0.18.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 8.1 MB
Tags CPython 3.9 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
de2f11ef84fb4cd5a80760fa3878907e6e475c15cfa3c274f190b273ffa8bb80
BLAKE2b-256 checksum
How to use checksums
54cd776f3d8888869b425ae2103911e2200451012b258db9ca4023775b9f5dda
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.18

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

Download URL bytewax-0.18.1-cp39-cp39-macosx_11_0_arm64.whl
Size 5.9 MB
Tags CPython 3.9 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
246b2fe0cc29da132df6115ee3660101231a928f422a7613a4279a9848d7ed2a
BLAKE2b-256 checksum
How to use checksums
76b7d5a9378f02253c32f57593824b27282df4c46b38e69202705e16575be60d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.18

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

Download URL bytewax-0.18.1-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
508b330c976cf93d2edd4defce1298c87e73563c9a276496631839a985407f5d
BLAKE2b-256 checksum
How to use checksums
f5248bc9844121ae537a31e274222c081bf937894969c2842fe3af33b4003651
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.18

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

Download URL bytewax-0.18.1-cp38-none-win_amd64.whl
Size 5.3 MB
Tags CPython 3.8 Windows x86-64
SHA-256 checksum
How to use checksums
325c75af305765f789f1ebea0b1f65b586a41ecbb6a6b172d5dc728c6fcaae8b
BLAKE2b-256 checksum
How to use checksums
ae8b609aaa1a51a262c955bac0a6bc1b72959621ca2dbb63a135b36921a77be9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.18

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

Download URL bytewax-0.18.1-cp38-cp38-manylinux_2_31_x86_64.whl
Size 8.1 MB
Tags CPython 3.8 Linux glibc 2.31+ x86-64
SHA-256 checksum
How to use checksums
40a260d084a276604c59a31e6ebb523312c9255cc7ccc33412c499c6afbed1a7
BLAKE2b-256 checksum
How to use checksums
86d92457dbe83c486dbaecc5603ac8b182d81fa91731f502ed03348912305a02
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.18

Release files / bytewax-0.18.1-cp38-cp38-manylinux_2_27_x86_64.whl

Download URL bytewax-0.18.1-cp38-cp38-manylinux_2_27_x86_64.whl
Size 8.0 MB
Tags CPython 3.8 Linux glibc 2.27+ x86-64
SHA-256 checksum
How to use checksums
7897ef04560d6cf69f6a37a5d1d1e488531714937b97d213060864d035ffe8ea
BLAKE2b-256 checksum
How to use checksums
868014f99f5ed562bc3d22e094f6cb30f24d2137936595af37c9077eee2a1f24
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.18

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

Download URL bytewax-0.18.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Size 7.8 MB
Tags CPython 3.8 Linux glibc 2.17+ ARMv7l
SHA-256 checksum
How to use checksums
a592efb1fac5ee81c240cbc871e000d9199c00b2c10bcc5550b48f17d1433c70
BLAKE2b-256 checksum
How to use checksums
91771df3f1fe66f2e77814c8485bf5a36e4d10e0e6a9f42625cc90f3a6d464a6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.18

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

Download URL bytewax-0.18.1-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
61c9dfc1c4576a8266303216b6e0b822bd09d317202a1784b0214568147ff973
BLAKE2b-256 checksum
How to use checksums
fc98c74109051bcc7a6f40f318c141ea286a3387b8a6a115fb23d54b86299da9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.18

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

Download URL bytewax-0.18.1-cp38-cp38-macosx_11_0_arm64.whl
Size 5.9 MB
Tags CPython 3.8 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
c7af5369a922a2ea988eaafa0cc0ab97fd9810c9bfbab5d366a7f70c90ba1bac
BLAKE2b-256 checksum
How to use checksums
9aa59c0c733e4d6c47c631d5f206068b6a28ee4751e877599745d0e3c2677a9e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.18

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

Download URL bytewax-0.18.1-cp38-cp38-macosx_10_12_x86_64.whl
Size 6.1 MB
Tags CPython 3.8 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
bfe922c7286509902e580b5134d6e8cb64f3b48831d674abc12f125e72892195
BLAKE2b-256 checksum
How to use checksums
b665a16a3f975f35caa790a16695b955d2d72da2e8c2351bc24783d9d8fd861f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.18
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