code: def wait(self, timeout=None):
      if self.job is None:
          # self.job is None meaning this process hasn't been fully started
          # yet.
          # TODO(jiale) timeout is ignored here, but since the job hasn't
          # been started yet, there is nothing to wait. This can happen when
          # Process.start() is called in another thread and usually it takes
          # a long time to start a new Process, so self.job can be empty.
          return None
  
      if self.returncode is None:
          code = self.backend.wait_for_job(self.job, timeout)
          if code is None:
              return code
          assert type(code) is int
          self.returncode = code
      return self.returncode
  
imports: import fcntl
  import io
  import itertools
  import logging
  import multiprocessing
  import os
  import socket
  import struct
  import subprocess
  import sys
  import threading
  import time
  from multiprocessing import reduction, spawn, util
  from multiprocessing.context import set_spawning_popen
  import cloudpickle
  import requests
  import fiber.util
  import fiber.config
  from fiber.backend import get_backend
  from fiber.core import JobSpec
  from fiber.core import ProcessStatus
label_desc: Use image node_id 11 for calling the Popen obj's underlying member method code with example usage: obj.wait(timeout) and returns: self, None, code