Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import multiprocessing
- import traceback
- from timeit import default_timer as timer
- import random
- class ReaderProcess(multiprocessing.Process):
- def __init__(self, filename, value):
- multiprocessing.Process.__init__(self)
- self.filename = filename
- self.val = value
- def run(self):
- self.read_data()
- def read_data(self):
- start = timer()
- try:
- with open(self.filename, "r") as f:
- a = f.read()
- except Exception:
- traceback.print_exc()
- self.val.value = timer() - start
- print(self.val.value)
- class WriterProcess(multiprocessing.Process):
- def __init__(self, filename):
- multiprocessing.Process.__init__(self)
- self.filename = filename
- def run(self):
- self.write_data()
- def write_data(self):
- try:
- with open(self.filename , 'a+', encoding="utf-8") as f:
- f.write("AAAAAAAAAA\n" * random.randint(40, 60))
- except Exception:
- traceback.print_exc()
- if __name__ == "__main__":
- iteration = 0
- queue = [[WriterProcess(str(i) + ".txt") for i in range(3)] for i in range(4)]
- val = multiprocessing.Value('d')
- times = [0.0, 0.0, 0.0]
- for j in range(1, 4):
- queue[j][j-1] = ReaderProcess(str(j-1) + ".txt", val)
- file_to_read = 0
- while True:
- iteration += 1
- cur = queue.pop(0)
- for process in cur:
- process.start()
- for process in cur:
- process.join()
- times[file_to_read] = float(val.value)
- if iteration >= 4:
- queue.append([WriterProcess(str(i) + ".txt") for i in range(3)])
- prets = times[:]
- prets[file_to_read] = float('inf')
- file_to_read = prets.index(min(prets))
- queue[-1][file_to_read] = ReaderProcess(str(file_to_read) + ".txt", val)
- else:
- file_to_read = iteration % 3
- print(iteration)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement