title: why pool and cached method has almost same runtime?
body: <p>When I run code without <code>lru_cache</code>  I get this result. Which is understandable</p>
  <p>with multiprocessing<br />
  time took 0.4375<br />
  without multiprocessing<br />
  time took8.8125</p>
  <p>But when I run using <code>lru_cache</code> this is the result:<br />
  Test1<br />
  with multiprocessing<br />
  time took 0.34375<br />
  without multiprocessing<br />
  time took 0.3125</p>
  <p>Test2<br />
  with multiprocessing<br />
  time took 3.234375<br />
  without multiprocessing<br />
  time took 3.046875</p>
  <p>He we can clearly see without multiprocessing is almost equal or little faster than multiprocessing method. What's the reason for this? I understand that creating process is overhead but work list is very huge (10 million) so I guess  chunk size is not too small. Or am I doing this wrong way?</p>
  <p>Code explanation:<br />
  <strong>oddlist ()</strong>  take number and return the sum of all odd nums in that range<br />
  <strong>oddcount</strong> is a tuple contains 10 million random numbers</p>
  <p>Code:</p>
  <pre><code>import os
  from random import randint
  from functools import reduce
  from operator import add
  from multiprocessing import Pool
  import time
  from functools import lru_cache
  
  @lru_cache(maxsize=None)
  def oddlist(num):
      return reduce(add,(i for i in range(num) if i&amp;1))
  
  
  if __name__ == '__main__':
      oddcounts=tuple(randint(10,50) for i in range(10000000))
      print('with multiporcessing')
      s=time.process_time()
      with Pool(12) as p:
          mp=p.map(oddlist, oddcounts)
      e=time.process_time()
      print(f'time took {e-s}')
      print('witout multiporcessing')
      s=time.process_time()
      z=tuple(oddlist(i) for i in oddcounts)
      e=time.process_time()
      print(f'time took {e-s}')
  </code></pre>