influxdata / influxdata/influxdb-client-python
ThreadPoolExecutor alway alive after close batching API and database client
Open
Nobody has claimed this yet.
bug
- Dominant language
- Python
- Stars
- 793
- Forks
- 186
- Avg merge
- 3h 2m
- Merged PRs (30d)
- 1
Description
Specifications
- Client Version: 1.40.0
- InfluxDB Version: 2.7.1
- Platform: Ubuntu
- Python Version: 3.10.9
Code sample to reproduce problem
import threading
import time
from influxdb_client import (
InfluxDBClient
)
from influxdb_client.client.write_api import (
WriteOptions,
WriteType,
)
def check_thread_alive():
"""Check if all thread are correctly closed."""
msg: str = f"{len(threading.enumerate())} threads running"
for thread in threading.enumerate():
msg += f"\n > {thread.name}"
print(msg)
data_points = [
{
"measurement": "temperature",
"tags": {"location": "room1"},
"time": "2024-02-02T12:00:00Z",
"fields": {"value": 25.5}
},
{
"measurement": "humidity",
"tags": {"location": "room1"},
"time": "2024-02-02T12:00:00Z",
"fields": {"value": 60}
},
]
print(">>>>>> START")
check_thread_alive()
print(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> create InfluxDBClient")
client = InfluxDBClient(
url="localhost:8086",
org="test",
token="LLxHucOTfD1zSHVSadNRJRzZh_nNZGNf1KrHCieOj847ucB2RcLCBJZogP2zNtMxvAZMlAWsSOHgSJChaO7b3A==")
check_thread_alive()
print(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> create write_api")
batch_write_api = client.write_api(
write_options=WriteOptions(
write_type=WriteType.batching))
check_thread_alive()
print(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> close write_api")
batch_write_api.close()
batch_write_api.flush()
check_thread_alive()
print(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> close InfluxDBClient")
client.close()
check_thread_alive()
print(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> wait 5 s")
time.sleep(5)
check_thread_alive()
print(">>>>>> STOP")
Expected behavior
When we close the batching API, associated threads are closed
Actual behavior
When we close the batching API, the associated thread ThreadPoolExecutor is alway alive
Additional info
My output
>>>>>> START
1 threads running
> MainThread
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> create InfluxDBClient
1 threads running
> MainThread
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> create write_api
2 threads running
> MainThread
> ThreadPoolExecutor-1_0
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> close write_api
2 threads running
> MainThread
> ThreadPoolExecutor-1_0
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> close InfluxDBClient
2 threads running
> MainThread
> ThreadPoolExecutor-1_0
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> wait 5 s
2 threads running
> MainThread
> ThreadPoolExecutor-1_0
>>>>>> STOP
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by tracing InfluxDBClient.write_api() with WriteOptions and WriteType.batching, then follow the close() and flush() paths for the ThreadPoolExecutor. Reproduce the issue with the supplied script; done means the executor thread is no longer listed after the batching API and client are closed.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- databases
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 38/100