title: subscribe_on with from_iterable/range in RxPY
body: <p>I'm trying to get my head around scheduling in reactive extensions for python. I would like to use <code>subscribe_on</code> to process multiple observables in parallel. This works fine if the observable is created with <code>just</code>, but not if for example <code>range</code> or <code>from_</code> are used.</p>
  
  <p><code>just</code> defaults to <code>Scheduler.immediate</code>, while other generators default to <code>Scheduler.current_thread</code>. Which causes the difference, but feels inconsistent to me. Probably because I don't grasp the full problem.<br>
  Consider the following example:</p>
  
  <pre class="lang-python prettyprint-override"><code>import rx
  from rx.concurrency.scheduler import Scheduler
  import time
  import threading
  
  
  def work(x):
      print "processing %s on thread %s" % (x, threading.currentThread().name)
      time.sleep(1)
  
  
  def finish(x):
      print "finished %s on thread %s" % (x, threading.currentThread().name)
  
  
  # Creates new thread (I like)
  rx.Observable.just(3)\
      .do_action(work)\
      .subscribe_on(Scheduler.new_thread)\
      .subscribe(finish)
  
  # Runs on MainThread (I don't like)
  rx.Observable.range(1, 3) \
      .do_action(work) \
      .subscribe_on(Scheduler.new_thread) \
      .subscribe(finish)
  </code></pre>
  
  <p>It works with <code>observe_on</code> or if the Scheduler is passed directly to the generator, but I would like to decouple observable creation from processing and achieve something like this:</p>
  
  <pre class="lang-python prettyprint-override"><code>import rx
  from rx.concurrency.scheduler import Scheduler
  import time
  import threading
  
  
  def work(x):
      print "processing %s on thread %s" % (x, threading.currentThread().name)
      time.sleep(1)
  
  
  def finish(x):
      print "finished %s on thread %s" % (x, threading.currentThread().name)
  
  
  def factory_single():
      return rx.Observable.just(1).do_action(work)
  
  
  def factory_multiple():
      return rx.Observable.range(2, 4).do_action(work)
  
  
  def process(factory):
      factory().subscribe_on(Scheduler.new_thread).subscribe(finish)
  
  # Creates a new thread (I like)
  process(factory_single)
  
  # Runs on MainThread (I don't like)
  process(factory_multiple)
  </code></pre>
  
  <p>Am I misunderstanding <code>subscribe_on</code>? Is my approach wrong?</p>