Sadece bağlantı için bir zaman aşımı belirtmek, ancak dosya transferi veya o kadar basit değil diğer işlemler sırasında zaman aşımları için olabilir.
Geridönüşüm yöntemi ve geridönüşüm yöntemleri bir geri arama sağlamanıza olanak tanıdığından, bir bekçi zamanlayıcısı uygulayabilirsiniz. Her veri aldığınızda zamanlayıcıyı sıfırlarsınız. En az 30 saniyede bir (veya her neyse) veri almazsanız, watchdog, FTP oturumunu iptal edip kapatabilir ve olay döngüsüne (veya herhangi bir şeye) geri gönderebilir.
ftpc = FTP(myhost, 'ftp', 30)
def timeout():
ftpc.abort() # may not work according to docs
ftpc.close()
eventq.put('Abort event') # or whatever
timerthread = [threading.Timer(30, timeout)]
def callback(data, *args, **kwargs):
eventq.put(('Got data', data)) # or whatever
if timerthread[0] is not None:
timerthread[0].cancel()
timerthread[0] = threading.Timer(30, timeout)
timerthread[0].start()
timerthread[0].start()
ftpc.retrbinary('RETR %s' % (somefile,), callback)
timerthread[0].cancel()
Bu yeterince iyi değilse, farklı bir API seçmeniz gerekecektir. Twisted çatısı, zaman aşımı mantığı eklemenize izin vermelidir FTP protocol support vardır.
Ne tür bir yanıt alırsınız (varsa)? Bu [400 kodlardan biri] (http://en.wikipedia.org/wiki/List_of_FTP_server_return_codes)? –