Skip to content

Commit

Permalink
perf: use pickle's loads/dumps as a faster deepcopy (#5281)
Browse files Browse the repository at this point in the history
* Use pickle's loads/dumps as a faster deepcopy

Signed-off-by: Marcel Bargull <[email protected]>

* ref: use clearer protocol spec

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Create 5281-perf-deepcopy

* Update pyproject.toml

* Update pyproject.toml

* Update pyproject.toml

* Update pyproject.toml

* Update pyproject.toml

* Update pyproject.toml

* Update pyproject.toml

* Update pyproject.toml

* Update pyproject.toml

* Update pyproject.toml

* Update pyproject.toml

* Update pyproject.toml

* Update pyproject.toml

* Update pyproject.toml

* Update pyproject.toml

---------

Signed-off-by: Marcel Bargull <[email protected]>
Co-authored-by: Marcel Bargull <[email protected]>
Co-authored-by: Matthew R. Becker <[email protected]>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
  • Loading branch information
4 people authored Jun 25, 2024
1 parent fbbc298 commit 3a09f13
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 2 deletions.
8 changes: 6 additions & 2 deletions conda_build/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import copy
import math
import os
import pickle
import re
import shutil
import time
Expand Down Expand Up @@ -820,9 +821,12 @@ def clean_pkgs(self):

def copy(self) -> Config:
new = copy.copy(self)
new.variant = copy.deepcopy(self.variant)
# Use picke.loads(pickle.dumps(...) as a faster copy.deepcopy alternative.
new.variant = pickle.loads(pickle.dumps(self.variant, pickle.HIGHEST_PROTOCOL))
if hasattr(self, "variants"):
new.variants = copy.deepcopy(self.variants)
new.variants = pickle.loads(
pickle.dumps(self.variants, pickle.HIGHEST_PROTOCOL)
)
return new

# context management - automatic cleanup if self.dirty or self.keep_old_work is not True
Expand Down
3 changes: 3 additions & 0 deletions news/5281-perf-deepcopy
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
### Enhancements

* Increased performance by using pickle instead of deepcopy. (#5281)
1 change: 1 addition & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,7 @@ filterwarnings = [
# ignore conda-index error
"ignore::PendingDeprecationWarning:conda_index",
"ignore::DeprecationWarning:conda_index",
"ignore:Python 3.14 will, by default, filter extracted tar archives and reject files or modify their metadata:DeprecationWarning",
]
markers = [
"serial: execute test serially (to avoid race conditions)",
Expand Down

0 comments on commit 3a09f13

Please sign in to comment.