Skip to content

Instantly share code, notes, and snippets.

@Snegovikufa
Last active August 29, 2015 14:15
Show Gist options
  • Save Snegovikufa/e2fa85d5ee8a318a5241 to your computer and use it in GitHub Desktop.
Save Snegovikufa/e2fa85d5ee8a318a5241 to your computer and use it in GitHub Desktop.
Parallel processing of dictionary
from multiprocessing import Pool, cpu_count
import time
import random
import logging
from pprint import pprint
logging.basicConfig(level=logging.DEBUG,
format='(%(threadName)-10s) %(message)s',
)
logger = logging.getLogger(__name__)
def foo(keeper):
seconds = random.random()
# Simulate cpu usage
start_time = time.time()
while True:
now_time = time.time()
if (now_time - start_time) > seconds:
break
x = 10005000 * 10005000
x = x * 10005000
keeper.value = seconds
return keeper
class Keeper(object):
def __init__(self, key, date):
self.key = key
self.date = date
self.value = None
def main():
initial_dict = {}
keys = ["1", "2", "3", "4"]
days = range(10)
for key in keys:
d = {}
initial_dict[key] = d
for day in days:
d[day] = []
t1 = time.time()
pool = Pool()
keepers = []
for key in keys:
for day in days:
keepers.append(Keeper(key, day))
keepers = pool.map(foo, keepers)
for k in keepers:
initial_dict[k.key][k.date].append(k.value)
t2 = time.time()
logger.debug ("ASYNC VERSION: %s" % (t2 - t1))
t2 = time.time()
for key in keys:
for day in days:
foo(Keeper(key, day))
t3 = time.time()
logger.debug ("SYNC VERSION: %s" % (t3 - t2))
if __name__ == '__main__':
logger.debug("CPU COUNT: %d" % cpu_count())
main()
# you can test me here: http://www.tutorialspoint.com/execute_python_online.php
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment