docs: def submit_job(job_ini, username, hazard_job_id=None):
      """
      Create a job object from the given job.ini file in the job directory
      and run it in a new process. Returns the job ID and PID.
      """
      job_id = logs.init('job')
      oq = engine.job_from_file(
          job_ini, job_id, username, hazard_calculation_id=hazard_job_id)
      pik = pickle.dumps(oq, protocol=0)  # human readable protocol
      code = RUNCALC % dict(job_id=job_id, hazard_job_id=hazard_job_id, pik=pik,
                            username=username)
      tmp_py = gettemp(code, suffix='.py')
      # print(code, tmp_py)  # useful when debugging
      devnull = subprocess.DEVNULL
      popen = subprocess.Popen([sys.executable, tmp_py],
                               stdin=devnull, stdout=devnull, stderr=devnull)
      threading.Thread(target=popen.wait).start()
      logs.dbcmd('update_job', job_id, {'pid': popen.pid})
      return job_id, popen.pid