import multiprocessing
from multiprocessing import *

class Worker:
    def __init__(self, size):
        self._semaphores = [Semaphore(0) for i in range(size + 1)]

    def run(self, name, acquire, release):
        for i in acquire:
            self._semaphores[i].acquire()
            print('Running', name)

        for i in release:
            self._semaphores[i].release()

if __name__ == '__main__':
    worker = Worker(5)
    Process(target=worker.run, args=('5', [5], [])).start()
    Process(target=worker.run, args=('4', [4,4], [5])).start()
    Process(target=worker.run, args=('3', [3], [4])).start()
    Process(target=worker.run, args=('2', [2], [4])).start()
    Process(target=worker.run, args=('1', [], [2,3])).start()