У меня есть очень простой вариант использования, в котором мне нужно найти файлы, которые были изменены за последние 10 минут, в двух разных каталогах.
Поскольку есть два разных каталога, я раскручиваю два отдельныхпотоки для этого и внутри каждого из запущенных потоков существует логика проверки файлов, которые были изменены.
Ниже приведен код того же самого:
import threading
import os
import time
from subprocess import Popen, PIPE
def getLatestModifiedFiles(seconds, _dir):
files = (fle for rt, _, f in os.walk(_dir) for fle in f if time.time() - os.stat(
os.path.join(rt, fle)).st_mtime < 300)
return list(files)
def getLatestModifiedFilesUnix(seconds, _dir):
lastseconds = seconds * -1
p = Popen(['/usr/bin/find', _dir, '-mmin', str(lastseconds)], stdout=PIPE, stderr=PIPE)
out, err = p.communicate()
print out.strip("\r\n")
if err != "":
print err
def run(logPath):
threadName = threading.currentThread().getName()
getLatestModifiedFilesUnix(10, logPath)
#files = getLatestModifiedFiles(300,logPath)
#for file in files:
# print "message from %(ThreadName)s...%(File)s" % {'ThreadName': threadName, 'File' : file}
if __name__ == "__main__":
logPaths = ["/home/appmyser/Rough", "/home/appmyser/Rough2"]
threads = []
for path in logPaths:
t = Thread(target=run, args=(path,))
threads.append(t)
t.start()
for t in threads:
t.join()
Функция: getLatestModifiedFiles
находит последние измененные файлы, используя собственный код Python, с другой стороны, функция: getLatestModifiedFilesUnix
делает то же самое, используя команду unix find.
Во втором случае я использую подпроцесс, который, насколько мне известно, создаетновый процесс.Мой вопрос заключается в том, является ли хорошей практикой вызывать подпроцесс из потока?Есть ли какие-то последствия для этого, которые я должен рассмотреть?
И каков родительский процесс недавно созданного подпроцесса?Может кто-нибудь подробно указать мне, как это работает?
Большое спасибо заранее.