code: def multiput(client, objs, **options):
      
      transient_pool = False
      outq = Queue()
  
      if 'pool' in options:
          pool = options['pool']
          del options['pool']
      else:
          pool = MultiPutPool()
          transient_pool = True
  
      try:
          pool.start()
          for obj in objs:
              task = PutTask(client, outq, obj, options)
              pool.enq(task)
  
          results = []
          for _ in range(len(objs)):
              if pool.stopped():
                  raise RuntimeError(
                          'Multi-put operation interrupted by pool '
                          'stopping!')
              results.append(outq.get())
              outq.task_done()
      finally:
          if transient_pool:
              pool.stop()
  
      return results
docs: Executes a parallel-store across multiple threads. Returns a list
      containing booleans or :class:`~riak.riak_object.RiakObject`
  
      If a ``pool`` option is included, the request will use the given worker
      pool and not a transient :class:`~riak.client.multi.MultiPutPool`. This
      option will be passed by the client if the ``multiput_pool_size``
      option was set on client initialization.
  
      :param client: the client to use
      :type client: :class:`RiakClient <riak.client.RiakClient>`
      :param objs: the objects to store in parallel
      :type objs: list of `RiakObject <riak.riak_object.RiakObject>` or
                  `TsObject <riak.ts_object.TsObject>`
      :param options: request options to
          :meth:`RiakClient.put <riak.client.RiakClient.put>`
      :type options: dict
      :rtype: list