Skip to content

Import is slow with inline field in aunique #4145

@jcassette

Description

@jcassette

Problem

Running this command in verbose (-vv) mode:

[julien@julien-nas /mnt/tank/julien]$ python3 -m cProfile -s tottime /home/julien/.local/bin/beet -vv import -A /mnt/tank/julien/Album/
user configuration: /mnt/tank/julien/beets/config.yaml
data directory: /mnt/tank/julien/beets
plugin paths:
Sending event: pluginload
inline: adding item field multidisc
inline: adding album field media
inline: adding album field format
library database: /mnt/tank/julien/beets/library.db
library directory: /mnt/tank/julien/music
Sending event: library_opened
Sending event: import_begin
Sending event: import_task_created
/mnt/tank/julien/Album
0 of 10 items replaced
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: before_item_moved
Sending event: item_moved
Sending event: database_change
Sending event: database_change
Sending event: before_item_moved
Sending event: item_moved
Sending event: database_change
Sending event: database_change
Sending event: before_item_moved
Sending event: item_moved
Sending event: database_change
Sending event: database_change
Sending event: before_item_moved
Sending event: item_moved
Sending event: database_change
Sending event: database_change
Sending event: before_item_moved
Sending event: item_moved
Sending event: database_change
Sending event: database_change
Sending event: before_item_moved
Sending event: item_moved
Sending event: database_change
Sending event: database_change
Sending event: before_item_moved
Sending event: item_moved
Sending event: database_change
Sending event: database_change
Sending event: before_item_moved
Sending event: item_moved
Sending event: database_change
Sending event: database_change
Sending event: before_item_moved
Sending event: item_moved
Sending event: database_change
Sending event: database_change
Sending event: before_item_moved
Sending event: item_moved
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: import_task_files
Sending event: album_imported
Sending event: import
Sending event: cli_exit

Led to this problem:

         4173933 function calls (4027432 primitive calls) in 120.860 seconds

   Ordered by: internal time

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
     2857  109.761    0.038  109.761    0.038 {method 'execute' of 'sqlite3.Connection' objects}
    ...

Setup

  • OS: FreeBSD julien-nas 12.2-RELEASE-p6 FreeBSD 12.2-RELEASE-p6 facd5d71c97(HEAD) TRUENAS amd64
  • Python version: Python version 3.8.12
  • beets version: beets version 1.5.0 + commit b67c25a
  • Turning off plugins made problem go away (yes/no): yes see below
[julien@julien-nas /mnt/tank/julien]$ python3 -m cProfile -s tottime /home/julien/.local/bin/beet -vv --plugins= import -A /mnt/tank/julien/Album/
user configuration: /mnt/tank/julien/beets/config.yaml
data directory: /mnt/tank/julien/beets
plugin paths:
Sending event: pluginload
library database: /mnt/tank/julien/beets/library.db
library directory: /mnt/tank/julien/music
Sending event: library_opened
Sending event: import_begin
Sending event: import_task_created
/mnt/tank/julien/Album
0 of 10 items replaced
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: before_item_moved
Sending event: item_moved
Sending event: database_change
Sending event: database_change
Sending event: before_item_moved
Sending event: item_moved
Sending event: database_change
Sending event: database_change
Sending event: before_item_moved
Sending event: item_moved
Sending event: database_change
Sending event: database_change
Sending event: before_item_moved
Sending event: item_moved
Sending event: database_change
Sending event: database_change
Sending event: before_item_moved
Sending event: item_moved
Sending event: database_change
Sending event: database_change
Sending event: before_item_moved
Sending event: item_moved
Sending event: database_change
Sending event: database_change
Sending event: before_item_moved
Sending event: item_moved
Sending event: database_change
Sending event: database_change
Sending event: before_item_moved
Sending event: item_moved
Sending event: database_change
Sending event: database_change
Sending event: before_item_moved
Sending event: item_moved
Sending event: database_change
Sending event: database_change
Sending event: before_item_moved
Sending event: item_moved
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: import_task_files
Sending event: album_imported
Sending event: import
Sending event: cli_exit
         604108 function calls (598012 primitive calls) in 2.915 seconds

   Ordered by: internal time

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
      135    1.085    0.008    1.085    0.008 {method 'execute' of 'sqlite3.Connection' objects}
    ...

My configuration (output of beet config) is:

directory: /mnt/tank/julien/music

plugins: inline
threaded: no

import:
    copy: no
    move: yes
    write: no
    log: /mnt/tank/julien/beets/log.txt
per_disc_numbering: yes

aunique:
    keys: albumartist album year format
    disambiguators: albumtype label catalognum albumdisambig releasegroupdisambig

paths:
    default: $albumartist - $year - $album [$format]%aunique{}/%if{$multidisc,Disc $disc/}$track - $title
item_fields:
    multidisc: 1 if disctotal > 1 else 0
album_fields:
    media: sorted(set(item.media for item in items))
    format: sorted(set(item.format for item in items))
acoustid:
    apikey: ********
discogs:
    user_token: ********
lastgenre:
    canonical: yes
    whitelist: /mnt/tank/julien/beets/genres.txt
pathfields: {}

Metadata

Metadata

Assignees

No one assigned

    Labels

    featurefeatures we would like to implement

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions