From 014ca0bd88924956cdc47dece979cc6506eb537c 2014-12-16 10:45:39 From: Daniel Valdez Date: 2014-12-16 10:45:39 Subject: [PATCH] This update consider connect and send FTP using multiprocessing with timeout --- diff --git a/schainpy/model/utils/jroutils_ftp.py b/schainpy/model/utils/jroutils_ftp.py index 6842689..4201adc 100644 --- a/schainpy/model/utils/jroutils_ftp.py +++ b/schainpy/model/utils/jroutils_ftp.py @@ -4,9 +4,10 @@ import os import glob import ftplib +import multiprocessing from model.proc.jroproc_base import ProcessingUnit, Operation -class FTP(): +class FTP(object): """ Ftp is a public class used to define custom File Transfer Protocol from "ftplib" python module @@ -305,31 +306,31 @@ class SendByFTP(Operation): print ValueError, 'Error FTP' print "don't worry the program is running..." - def connect(self, server, username, password, remotefolder): - if not(self.status): - return - try: - self.ftpObj = FTP(server, username, password, remotefolder) - except: - self.error_print(ValueError) - self.status = 0 + def worker_ftp(self, server, username, password, remotefolder, filenameList): + + self.ftpObj = FTP(server, username, password, remotefolder) + for filename in filenameList: + self.ftpObj.upload(filename) + self.ftpObj.close() - def put(self): + def ftp_thread(self, server, username, password, remotefolder): if not(self.status): return - try: - for filename in self.filenameList: - self.ftpObj.upload(filename) - except: - self.error_print(ValueError) + p = multiprocessing.Process(target=self.worker_ftp, args=(server, username, password, remotefolder, self.filenameList,)) + p.start() + + p.join(3) + + if p.is_alive(): + p.terminate() + p.join() + print 'killing ftp process...' self.status = 0 - - def close(self): - if not(self.status): return - self.ftpObj.close() + self.status = 1 + return def filterByExt(self, ext, localfolder): fnameList = glob.glob1(localfolder,ext) @@ -344,11 +345,9 @@ class SendByFTP(Operation): if self.counter >= period: self.filterByExt(ext, localfolder) - self.connect(server, username, password, remotefolder) - - self.put() - - self.close() - + self.ftp_thread(server, username, password, remotefolder) + self.counter = 0 + self.status = 1 +