summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjvoisin2018-04-14 16:10:45 +0200
committerjvoisin2018-04-14 16:13:51 +0200
commit6f4ed2490fbcde0b74e7b8251ad71e29b430b8ef (patch)
tree50bfda50dae886697e683ade3c5cd3473fb27f17
parentcef5068fe9427645e2e3edef7efe8cb83897f6d4 (diff)
Thread the cleaning process
-rwxr-xr-xmain.py32
1 files changed, 29 insertions, 3 deletions
diff --git a/main.py b/main.py
index 80355ae..be2508e 100755
--- a/main.py
+++ b/main.py
@@ -3,6 +3,9 @@
3import os 3import os
4import mimetypes 4import mimetypes
5import argparse 5import argparse
6from threading import Thread
7import multiprocessing
8from queue import Queue
6 9
7from src import parser_factory 10from src import parser_factory
8 11
@@ -75,6 +78,14 @@ def __get_files_recursively(files):
75 for _f in _files: 78 for _f in _files:
76 yield os.path.join(path, _f) 79 yield os.path.join(path, _f)
77 80
81def __do_clean_async(q):
82 while True:
83 f = q.get()
84 if f is None: # nothing more to process
85 return
86 clean_meta(f)
87 q.task_done()
88
78 89
79def main(): 90def main():
80 arg_parser = create_arg_parser() 91 arg_parser = create_arg_parser()
@@ -86,12 +97,27 @@ def main():
86 show_parsers() 97 show_parsers()
87 return 98 return
88 99
89 if args.show: 100 elif args.show:
90 for f in __get_files_recursively(args.files): 101 for f in __get_files_recursively(args.files):
91 show_meta(f) 102 show_meta(f)
92 else: 103 return
104
105 else: # Thread the cleaning
106 q = Queue(maxsize=0)
107 threads = list()
93 for f in __get_files_recursively(args.files): 108 for f in __get_files_recursively(args.files):
94 clean_meta(f) 109 q.put(f)
110
111 for _ in range(multiprocessing.cpu_count()):
112 worker = Thread(target=__do_clean_async, args=(q, ))
113 worker.start()
114 threads.append(worker)
115
116 for _ in range(multiprocessing.cpu_count()):
117 q.put(None) # stop the threads
118
119 for worker in threads:
120 worker.join()
95 121
96 122
97if __name__ == '__main__': 123if __name__ == '__main__':