Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

ApiClient.__del__ triggers shutdown-time exception in influxdb-client 1.50.0

未关闭
#719 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

评估

难度
3/5
预计耗时
1-2 天
新手友好度
65/100
Issue 类型
缺陷
描述清晰度
描述清楚
活跃度
活跃
技术栈
python

调研方向

The issue is in the ApiClient class's del method. Look at the influxdb_client/api_client.py file, find the ApiClient class, and examine its del and _signout methods. The fix involves adding a guard to check if the HTTP session or other necessary state is still available before calling _signout. Test by creating a script that reproduces the warning, applying the fix, and verifying the warning disappears. Run existing tests to ensure no regressions.

由索引模型根据 Issue 内容生成。

描述

bug
Specifications
  • Python: 3.11.x
  • Package: influxdb-client 1.50.0
  • OS: Linux
Code sample to reproduce problem
from influxdb_client import InfluxDBClient

client = InfluxDBClient(url="http://localhost:8086", token="token", org="org")
client.close()
# app exits normally here

or in a slightly more explicit shutdown flow:

from influxdb_client import InfluxDBClient

c = InfluxDBClient(url="http://localhost:8086", token="token", org="org")
c.close()
del c
import gc
gc.collect()

The exact warning may appear at interpreter exit, depending on timing and GC state.

Expected behavior

The library should not emit shutdown-time exceptions during normal program exit after close() has been called. The finalizer should be safe when the interpreter is already tearing down objects and modules.

Actual behavior

The destructor path triggers late in shutdown and emits Exception ignored... warnings, which are noisy and can hide real application errors in CI logs.

Additional info

What I observed

The warning is emitted even after the application calls close() correctly. The destructor appears to run late, during interpreter shutdown, when module-level references are already partially torn down.

The relevant path is effectively:

InfluxDBClient.close() ->
    api_client.close() ->
    ApiClient.__del__() ->
        _signout()

and ApiClient.__del__ is invoked during interpreter shutdown, after the library has already started clearing state.

Root cause

The issue is in the library destructor rather than the caller application code:

  • ApiClient.__del__ does not guard against interpreter shutdown
  • it calls _signout() without verifying that the underlying HTTP/session state still exists
  • at shutdown time, globals and object members may already be None or already removed
  • that leads to Exception ignored in: <function ApiClient.__del__ ...> warnings even though the app may have completed successfully

This is a classic destructor-safety issue: library cleanup should not run unconditionally in Python finalization when module state is already being torn down.

Evidence

Code inspection of the installed library shows the destructor path is roughly:

class ApiClient:
    def __del__(self):
        try:
            self._signout()
        except Exception:
            pass

and _signout() accesses HTTP/session state that may already be cleared during interpreter shutdown.

The app-side mitigation we tried was to explicitly close and clear the client object before exit; however, the warning remains because it is triggered from inside the library finalizer and not from the application's own logic.

Proposed fix

The library should guard shutdown-time finalizers so they do nothing if Python is already tearing down the interpreter or if the necessary member state is no longer available.

Examples of safe patterns:

def __del__(self):
    try:
        if getattr(self, "_http", None) is not None:
            self._signout()
    except Exception:
        pass

or equivalent checks using threading / interpreter-state guard logic.

It is also advisable to make _signout() resilient to partially initialized state and to avoid assuming members remain valid during finalization.

Impact

This is a library correctness issue with noisy shutdown warnings that may confuse users and CI systems. It is especially problematic because it can look like the application failed even when the app completed its work normally.

主要语言
Python
星标
792
派生
186
平均合并
3 小时 2 分钟
30 天内合并 PR
1

贡献指南

这个仓库没有索引到贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

influxdata/influxdb-client-python 的其他 Issue

查看 influxdata/influxdb-client-python 的全部 Issue

相似的 Issue

更多 Python Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。