Fix `Arial.ttf` threaded multi-download bug (#3725)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
single_channel
Glenn Jocher 1 year ago committed by GitHub
parent 9aca61c465
commit fadbef84e1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -252,6 +252,36 @@ if WINDOWS: # emoji-safe logging
LOGGER.addFilter(EmojiFilter()) LOGGER.addFilter(EmojiFilter())
class ThreadingLocked:
"""
A decorator class for ensuring thread-safe execution of a function or method.
This class can be used as a decorator to make sure that if the decorated function
is called from multiple threads, only one thread at a time will be able to execute the function.
Attributes:
lock (threading.Lock): A lock object used to manage access to the decorated function.
Usage:
@ThreadingLocked()
def my_function():
# Your code here
pass
"""
def __init__(self):
self.lock = threading.Lock()
def __call__(self, f):
from functools import wraps
@wraps(f)
def decorated(*args, **kwargs):
with self.lock:
return f(*args, **kwargs)
return decorated
def yaml_save(file='data.yaml', data=None): def yaml_save(file='data.yaml', data=None):
""" """
Save YAML data to a file. Save YAML data to a file.

@ -20,9 +20,9 @@ import requests
import torch import torch
from matplotlib import font_manager from matplotlib import font_manager
from ultralytics.yolo.utils import (AUTOINSTALL, LOGGER, ONLINE, ROOT, USER_CONFIG_DIR, TryExcept, clean_url, colorstr, from ultralytics.yolo.utils import (AUTOINSTALL, LOGGER, ONLINE, ROOT, USER_CONFIG_DIR, ThreadingLocked, TryExcept,
downloads, emojis, is_colab, is_docker, is_jupyter, is_kaggle, is_online, clean_url, colorstr, downloads, emojis, is_colab, is_docker, is_jupyter, is_kaggle,
is_pip_package, url2file) is_online, is_pip_package, url2file)
def is_ascii(s) -> bool: def is_ascii(s) -> bool:
@ -155,6 +155,7 @@ def check_pip_update_available():
return False return False
@ThreadingLocked()
def check_font(font='Arial.ttf'): def check_font(font='Arial.ttf'):
""" """
Find font locally or download to user's configuration directory if it does not already exist. Find font locally or download to user's configuration directory if it does not already exist.

Loading…
Cancel
Save