Этот сценарий проверяет FTP и загружает файлы через запланированные интервалы.
Отправка на него правильного сигнала (SIGUSR1) должна изящно закрыть его, ожидая завершения проверки, если она запущена.
class ScheduledFtpCheck(FtpCheck, Scheduler):
def __init__(self):
...
self.aborted, self.checking = False, False
def abort(self, *args, **kwargs):
self.aborted = True
if not self.checking: self.quit()
def checkAll(self):
if not self.isAborted():
self.checking = True
self.checkAll()
self.checking = False
if self.aborted: self.quit()
...
def main():
sch = ScheduledFtpCheck()
signal.signal(signal.SIGUSR1, sch.abort)
sch.start()
проблема в том, что я получаю прерванный системный вызов, из-за которого ftplib.FTP преждевременно завершает работу:
Traceback (most recent call last):
File "/root/my-applications/sensor/sensor/lib/importutils2.py", line 137, in connectAndCheckAll
try: self.checkAll()
...
File "/usr/lib/python2.6/ftplib.py", line 182, in getline
line = self.file.readline()
File "/usr/lib/python2.6/socket.py", line 406, in readline
data = self._sock.recv(self._rbufsize)
error: [Errno 4] Interrupted system call
Так что мой скрипт обрабатывает сигнал правильно, а плановая проверка - нет.
Почему? Как я могу предотвратить это?
Спасибо за вашу поддержку