Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion py4j-java/ant.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# Version of the software
version=0.10.9.9
version=0.11

# Path to the JUnit 4 jar. YOU MUST SET THIS VALUE. Otherwise, the test classes won't compile.
junit.path=junit-4.10.jar
Expand Down
2 changes: 1 addition & 1 deletion py4j-java/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,7 @@ task createPom {
packaging 'jar'
groupId 'net.sf.py4j'
artifactId 'py4j'
version '0.10.9.9'
version '0.11'
name 'Py4J'
description 'Py4J enables Python programs running in a Python interpreter to dynamically access Java objects in a Java Virtual Machine. Methods are called as if the Java objects resided in the Python interpreter and Java collections can be accessed through standard Python collection methods. Py4J also enables Java programs to call back Python objects.'
scm {
Expand Down
4 changes: 2 additions & 2 deletions py4j-java/gradle.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
group=py4j
bundleVersion=0.10.9.9
version=0.10.9.9
bundleVersion=0.11
version=0.11
sourceCompatibility=1.6
targetCompatibility=1.6
# Define the jdk6BootClasspath in your ~/.gradle/gradle.properties
Expand Down
2 changes: 1 addition & 1 deletion py4j-java/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
</parent>
<groupId>net.sf.py4j</groupId>
<artifactId>py4j</artifactId>
<version>0.10.9.9</version>
<version>0.11</version>
<name>Py4J</name>
<description>Py4J enables Python programs running in a Python interpreter to dynamically access Java objects in a Java Virtual Machine. Methods are called as if the Java objects resided in the Python interpreter and Java collections can be accessed through standard Python collection methods. Py4J also enables Java programs to call back Python objects.</description>
<licenses>
Expand Down
2 changes: 1 addition & 1 deletion py4j-python/src/py4j/version.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__version__ = '0.10.9.9'
__version__ = '0.11'
46 changes: 43 additions & 3 deletions py4j-web/changelog.rst
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,20 @@ Changelog
The changelog describes in plain English the changes that occurred between Py4J
releases.

Unreleased
----------
Py4J 0.11
---------

- Release date: TBD

This is the first release since Py4J 0.10.9.9 (January 2025). It drops Python 2
support, adds a suite of performance improvements, introduces a local
performance-testing framework and continuous benchmarking in CI, and fixes
several lifecycle and correctness bugs. The most important
backwards-incompatible changes are listed first.

- Python side: **Python 2 is no longer supported.** The Python 2 compatibility
layer has been removed. Py4J now requires Python 3.9 or newer (tested on
3.9–3.13). (#585)

- Python side: Memoize attribute lookups on ``JVMView``,
``JavaPackage``, and ``JavaClass`` via a per-instance bounded LRU
Expand All @@ -21,6 +33,26 @@ Unreleased
attribute cache so cached references no longer pin the gateway
client past shutdown. Closes issue #128; refs #557.

- Python side: Faster ``bytearray`` decoding and hot-path shortcuts in
``smart_decode`` on the protocol layer. Closes #570; credit to @markjm
(#575). (#593)

- Python side: Cold-start improvements — tight-polling callback-server
readiness instead of a blind sleep, plus cold-start benchmark scenarios.
Refs #557. (#595)

- Python + Java side: Disable Nagle's algorithm (``TCP_NODELAY``) on all Py4J
socket connections, reducing small-message round-trip latency. (#592)

- Python side: Python 3 modernization — ``super()`` without arguments,
``raise ... from``, packaging/version metadata, and light type hints. (#594)

- Python side: Use the module logger instead of the root logger when sending a
command. (#499)

- Java side: ``Iterator.next`` no longer silently ignores exceptions other than
the end-of-iteration signal. (#554)

- Java side: Fix listener-lifecycle correctness bugs in
``GatewayServer`` / ``ClientServer``:

Expand Down Expand Up @@ -49,7 +81,15 @@ Unreleased
``shutdown(boolean)`` is unchanged (``gracePeriodMs == 0`` = abrupt,
back-compat). Before this fix, ``shutdown()`` immediately force-closed all
active connections, silently dropping work in flight — a real-world
data-loss risk for callback-heavy workflows.
data-loss risk for callback-heavy workflows. (#582)

- Build, CI & testing: Add a local-run performance-testing framework (#578) and
CodSpeed continuous benchmarking, opt-in on pull requests via the
``perf-check`` label (#584, #586, #587). Add bandwidth / cold-start /
latency-curve baseline coverage (#591) and close protocol / auth /
concurrency test-coverage gaps while hardening flaky tests and process
teardown (#590). Drop the sunset jcenter repository and retry Gradle on
transient CDN failures (#589). Upgrade GitHub Actions versions (#572).

Py4J 0.10.9.9
-------------
Expand Down
3 changes: 3 additions & 0 deletions py4j-web/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,9 @@ Support & Resources
News
====

* **TBD** - Py4J 0.11 has been released. See the
:doc:`changelog` for more details about the bug fixes and new features.

* **January 15th 2024** - Py4J 0.10.9.9 has been released. See the
:doc:`changelog` for more details about the bug fixes and new features.

Expand Down
Loading