Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/python
- # -*- coding: utf-8 -*-
- import os
- import sys
- import time
- from multiprocessing import Process, cpu_count
- #-----------------------------------------------------------------------
- def log(msg):
- print "[%s %d] %s" % (time.asctime(), os.getpid(), msg)
- #-----------------------------------------------------------------------
- def dummy_process():
- import random
- t = random.randint(0, 2)
- log("Sleeping %d second(s)..." % t)
- time.sleep(t)
- log("Done, bye")
- #-----------------------------------------------------------------------
- def process_manager(total_procs, target, wait_time=0.2):
- """ Always maintain a total of @total_procs running @target and
- waiting for each thread to finish @wait_time second(s). """
- procs = []
- log("Maximum number of processes in pool is %d" % total_procs)
- while 1:
- if len(procs) < total_procs:
- log("Starting process %d" % (len(procs)+1))
- p = Process(target=target)
- p.start()
- procs.append(p)
- log("Total of %d process(es) started" % len(procs))
- else:
- i = 0
- for p in list(procs):
- p.join(wait_time)
- if not p.is_alive():
- log("Process finished, deleting and starting a new one...")
- del procs[i]
- continue
- i += 1
- if __name__ == "__main__":
- total_procs = cpu_count()*5
- manage_pool(total_procs, dummy_process)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement