title: Python: Why is the multiprocessing lock shared among processes here?
body: <p>I am trying to share a lock among processes. I understand that the way to share a lock is to pass it as an argument to the target function. However I found that even the approach below is working. I could not understand the way the processes are sharing this lock. Could anyone please explain? </p>
  
  <pre><code>import multiprocessing as mp
  import time
  
  
  class SampleClass:
  
      def __init__(self):
          self.lock = mp.Lock()
          self.jobs = []
          self.total_jobs = 10
  
      def test_run(self):
          for i in range(self.total_jobs):
              p = mp.Process(target=self.run_job, args=(i,))
              p.start()
              self.jobs.append(p)
  
          for p in self.jobs:
              p.join()
  
      def run_job(self, i):
          with self.lock:
              print('Sleeping in process {}'.format(i))
              time.sleep(5)
  
  
  if __name__ == '__main__':
      t = SampleClass()
      t.test_run()
  </code></pre>