Skip to content

Instantly share code, notes, and snippets.

@zirconias
Created July 11, 2016 18:08
Show Gist options
  • Save zirconias/1dba018ca9596577df979c1c127ee960 to your computer and use it in GitHub Desktop.
Save zirconias/1dba018ca9596577df979c1c127ee960 to your computer and use it in GitHub Desktop.
kovaro test
import os
import sys
import datetime
import threading
import re
import Queue
def log_info(message):
timestamp = datetime.datetime.now()
print '%s-INFO-%s' % (timestamp, message)
class Finder(object):
def __init__(self, root_path):
self.root_path = root_path
def __iter__(self):
for root, dirs, files in os.walk(self.root_path):
for fi in files:
fullname = root + '/' + fi
yield fullname
def filesfilter(item):
regex = re.compile('^.+\.txt$')
if re.match(regex, item):
return True
else:
return None
def check(item):
if 'hello' in open(item).read():
return True
queue = Queue.Queue()
class Worker(threading.Thread):
def __init__(self, myqueue):
super(Worker, self).__init__()
self.queue = myqueue
def run(self):
log_info('worker started')
while True:
try:
filename = self.queue.get()
if filesfilter(item=filename):
if check(item=filename):
log_info('hello found at: %s' % filename)
except Exception, err:
log_info('error, file list is empty %s' % err)
self.queue.task_done()
def main(argv):
if len(argv) <= 1:
log_info('insufficient arguments, please provide a directory as a starting point')
sys.exit(0)
log_info('started')
finder = Finder(root_path=sys.argv[1])
# workers
for i in range(2):
t = Worker(queue)
t.setDaemon(True)
t.start()
# populate queue with files path
for filename in finder:
queue.put(filename)
# wait on the queue until everything has been processed
queue.join()
log_info('done')
main(sys.argv)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment