refactor: multiprocessing helper#222
Conversation
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## main #222 +/- ##
==========================================
+ Coverage 78.90% 88.58% +9.68%
==========================================
Files 36 28 -8
Lines 2607 2068 -539
==========================================
- Hits 2057 1832 -225
+ Misses 550 236 -314 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
| bucket=self.database, | ||
| record=f"{measurement},tag=a value=\"number{x}\" {time.time_ns()}" | ||
| ) | ||
| writer.__del__() |
There was a problem hiding this comment.
Please don't forget that ideally __del__() should not be called directly, and that instead a with block should be used here.
https://github.com/InfluxCommunity/influxdb3-python/pull/217/changes#r3507988624
6fbdf4b to
f227120
Compare
706407e to
53ac912
Compare
There was a problem hiding this comment.
Pull request overview
This PR refactors the write stack by removing the generated OpenAPI-style service/client layer and moving write request construction and HTTP dispatch directly into WriteApi, while also updating tests and documentation to reflect the new behavior and configuration surface.
Changes:
- Refactors
WriteApito perform request preparation + HTTP calls directly via a new low-levelRestClient(removingApiClient/WriteService/Configuration). - Updates
InfluxDBClient3initialization and tests to use the new header/rest client approach and to validate required constructor keys. - Refactors and adds integration coverage for
MultiprocessingWriterstart-method behavior and directWriteApiusage.
Reviewed changes
Copilot reviewed 25 out of 25 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| CHANGELOG.md | Documents breaking changes and new construction patterns (example needs a small syntax fix). |
| influxdb_client_3/init.py | Reworks InfluxDBClient3 construction to create RestClient + WriteApi directly and enforce required keys. |
| influxdb_client_3/write_client/init.py | Removes deprecated exports and re-exports updated WriteApi/types. |
| influxdb_client_3/write_client/_sync/api_client.py | Removes legacy generated ApiClient. |
| influxdb_client_3/write_client/_sync/rest.py | Removes legacy generated REST client implementation. |
| influxdb_client_3/write_client/_sync/rest_client.py | Adds new RestClient for low-level HTTP handling + logging/redaction. |
| influxdb_client_3/write_client/client/init.py | Removes re-export of removed WriteService. |
| influxdb_client_3/write_client/client/_base.py | Removes legacy base client/write-api helpers tied to generated stack. |
| influxdb_client_3/write_client/client/influxdb_client.py | Removes legacy v2 InfluxDBClient. |
| influxdb_client_3/write_client/client/logging_handler.py | Removes InfluxLoggingHandler implementation. |
| influxdb_client_3/write_client/client/util/helpers.py | Updates exception import path. |
| influxdb_client_3/write_client/client/util/multiprocessing_helper.py | Refactors MultiprocessingWriter to create WriteApi directly and set default start method. |
| influxdb_client_3/write_client/client/write/init.py | Removes legacy re-export of removed WriteService. |
| influxdb_client_3/write_client/client/write_api.py | Major refactor: WriteApi becomes standalone, builds write requests and calls RestClient directly, retains batching pipeline. |
| influxdb_client_3/write_client/configuration.py | Removes legacy generated configuration object. |
| influxdb_client_3/write_client/service/init.py | Removes legacy service package init exporting WriteService. |
| influxdb_client_3/write_client/service/_base_service.py | Removes legacy service base class. |
| influxdb_client_3/write_client/service/write_service.py | Removes legacy generated WriteService. |
| influxdb_client_3/write_client/write_exceptions.py | Removes _BaseRESTClient logger helper (moved to RestClient). |
| tests/test_influxdb_client_3.py | Updates unit tests for new client/write header/rest behavior and required params. |
| tests/test_influxdb_client_3_integration.py | Adds integration tests for direct WriteApi usage, multiprocessing helper, and async call path. |
| tests/test_polars.py | Updates write tests to mock WriteApi call sites instead of WriteService. |
| tests/test_query.py | Fixes typo in client init parameter (database). |
| tests/test_write_api.py | Refactors tests from generated service/client usage to InfluxDBClient3/WriteApi usage. |
| tests/test_write_local_server.py | Updates exception import path. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| def __init__(self, start_method='spawn', **kwargs) -> None: | ||
| """ | ||
| Initialize defaults. | ||
|
|
||
| For more information how to initialize the writer see the examples above. | ||
| For more information on how to initialize the writer, see the examples above. | ||
|
|
||
| :param kwargs: arguments are passed into ``__init__`` function of ``InfluxDBClient`` and ``write_api``. | ||
| """ | ||
| multiprocessing.set_start_method(start_method, force=True) | ||
| multiprocessing.Process.__init__(self) |
| for key in ["host", "token", "database"]: | ||
| if locals().get(key) is None: | ||
| raise Exception(f"The '{key}' key is required") | ||
|
|
There was a problem hiding this comment.
Not necessary.
206c4a9 to
f6ef07c
Compare
f6ef07c to
ab75516
Compare
|
@bednar @karel-rehor @alespour |
Closes #
Proposed Changes
MultiprocessingWriterclass:- WriteApi will be created and used directly in the class for writing.
-
MultiprocessingWriterwill create processing by "spawn" method by default, but users can pass the processing creation method as a parameter to constructor.- Tests are added for writing with multiprocessing.
Checklist