2011-07-19 20 views
5

Bir FTP sunucusuna büyük miktarda dosya yükleme. Yüklemenin ortasında, sunucu daha fazla yüklememi engelliyor. Sunucunun zaman aşımına uğradığını, verilerin yeniden bağlanıp yayınlanmaya devam ettiğini algılamanın bir yolu olduğunu bilen var mı? İletim için Python ftp kitaplığını kullanıyorum.Python'da ftp sunucusu zaman aşımları nasıl algılanır

Teşekkür

+1

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)? –

cevap

4

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.

İlgili konular