code: def test_enqueuer_multiprocessing(workers: int) -> None:
      """Same enqueuer test as above, but with multiprocessing enabled.
  
      An arbitrary set of (rank_size, skip, shuffle) parameters from the above test is chosen in
      order to exercise the keras.enqueuer._MultiprocessingEnqueuer (with two choices for `workers`
      for extra safety). In this test, multiprocessing is slow on macOS, so we're minimizing the
      number of times we execute it assuming there's no interaction between the choice of
      threading/multiprocessing and the examples loaded by the enqueuer.
      """
      epoch_len = 100
      rank, size = (1, 3)
      skip = 50
      shuffle = True
  
      # Ensure that the enqueuer reliably returns what the sampler is returning.
      sampler = keras._Sampler(
          epoch_len, rank, size, shuffle, 777, skip
      )
  
      with keras._build_enqueuer(
          sequence=IdentitySequence(100),
          workers=workers,
          use_multiprocessing=True,
          max_queue_size=10,
          shard_rank=rank,
          num_shards=size,
          repeat=False,
          shuffle=shuffle,
          shuffle_seed=777,
          prior_batches_trained=skip,
      ) as enqueuer:
          assert list(enqueuer.data()) == list(
              sampler.yield_epoch()
          ), "first epoch was wrong"
          assert list(enqueuer.data()) == list(
              sampler.yield_epoch()
          ), "second epoch was wrong"
          assert list(enqueuer.data()) == list(
              sampler.yield_epoch()
          ), "third epoch was wrong"
  
imports: from typing import Tuple
  import numpy
  import pytest
  from tensorflow.keras.utils import Sequence
  import determined
  from determined import keras
  from determined.common import check
  from tests.experiment import tf_utils
label_desc: Use image node_id 11 for calling a global function with example usage: test_enqueuer_multiprocessing(workers) without return types