code: def _refresh(self) -> None:
      now = time.time()
      # Check before acquiring lock to prevent excessive locking
      if now < self._check_time:
          return
      with self._lock:
          # Real time check after acquiring lock
          if now < self._check_time:
              return
          self._check_time = now + self._check_every
          if self._refresh_needed():
              logger.info(
                  "credential file changes detected, refreshing credentials"
              )
              self._load_and_set_credentials()
  
imports: import logging
  import os
  import threading
  import time
  from typing import Any
  import boto3
  from botocore import session
  from botocore.compat import ensure_unicode
  from botocore.credentials import CredentialProvider, Credentials, ReadOnlyCredentials, SharedCredentialProvider
  from botocore.session import get_session
label_desc: Use image node_id 6 for calling the RefreshableSharedCredentials obj's underlying member method code with example usage: obj._refresh() without return types