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()