Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

sqlite3 Blob objects leave behind weakrefs which are never cleaned up #144424

Labels
@takluyver

Description

@takluyver

Bug report

Bug description:

The sqlite3Blob class registers a weakref to itself on the Connection it came from. These are added to a list and never cleaned up, so if you have a long-lived connection and call.blobopen() repeatedly, you gradually accumulate ever more dead weakrefs.

It looks like the blob weakrefs were added to match a similar system for weakrefs (removed in#144378), but the code to periodically clear out dead weakrefs was missed.

importgcimportsqlite3conn=sqlite3.connect(":memory:")conn.execute("CREATE TABLE foo(a INTEGER PRIMARY KEY, b BLOB)")conn.execute("INSERT INTO foo VALUES(NULL, ?)", (b'abcdefpokpokpko',))conn.commit()# Create & destroy many Blob objectsfor_inrange(10_000):conn.blobopen("foo","b",1)# Get a reference to the internal list of blob weakrefs - you may need to play with the index hereblob_list=gc.get_referents(conn)[-3]print(len(blob_list))

CPython versions tested on:

3.14

Operating systems tested on:

Linux

Linked PRs

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    Status

    No status

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions


      [8]ページ先頭

      ©2009-2026 Movatter.jp