title: TypeError: can't pickle _thread.lock objects
body: <p>Trying to run two different functions at the same time with shared queue and get an error...how can I run two functions at the same time with a shared queue? This is Python version 3.6 on Windows 7. </p>
  
  <pre><code>from multiprocessing import Process
  from queue import Queue
  import logging
  
  def main():
      x = DataGenerator()
      try:
          x.run()
      except Exception as e:
          logging.exception("message")
  
  
  class DataGenerator:
  
      def __init__(self):
          logging.basicConfig(filename='testing.log', level=logging.INFO)
  
      def run(self):
          logging.info("Running Generator")
          queue = Queue()
          Process(target=self.package, args=(queue,)).start()
          logging.info("Process started to generate data")
          Process(target=self.send, args=(queue,)).start()
          logging.info("Process started to send data.")
  
      def package(self, queue): 
          while True:
              for i in range(16):
                  datagram = bytearray()
                  datagram.append(i)
                  queue.put(datagram)
  
      def send(self, queue):
          byte_array = bytearray()
          while True:
              size_of__queue = queue.qsize()
              logging.info(" queue size %s", size_of_queue)
              if size_of_queue &gt; 7:
                  for i in range(1, 8):
                      packet = queue.get()
                      byte_array.append(packet)
                  logging.info("Sending datagram ")
                  print(str(datagram))
                  byte_array(0)
  
  if __name__ == "__main__":
      main()
  </code></pre>
  
  <p>The logs indicate an error, I tried running console as administrator and I get the same message...</p>
  
  <pre><code>INFO:root:Running Generator
  ERROR:root:message
  Traceback (most recent call last):
    File "test.py", line 8, in main
      x.run()
    File "test.py", line 20, in run
      Process(target=self.package, args=(queue,)).start()
    File "C:\ProgramData\Miniconda3\lib\multiprocessing\process.py", line 105, in start
      self._popen = self._Popen(self)
    File "C:\ProgramData\Miniconda3\lib\multiprocessing\context.py", line 223, in _Popen
      return _default_context.get_context().Process._Popen(process_obj)
    File "C:\ProgramData\Miniconda3\lib\multiprocessing\context.py", line 322, in _Popen
      return Popen(process_obj)
    File "C:\ProgramData\Miniconda3\lib\multiprocessing\popen_spawn_win32.py", line 65, in __init__
      reduction.dump(process_obj, to_child)
    File "C:\ProgramData\Miniconda3\lib\multiprocessing\reduction.py", line 60, in dump
      ForkingPickler(file, protocol).dump(obj)
  TypeError: can't pickle _thread.lock objects
  </code></pre>