2011-07-19 25 views
5

Tải lên một lượng lớn tệp vào máy chủ FTP. Ở giữa quá trình tải lên của tôi, máy chủ hết thời gian chờ tôi tải lên thêm nữa. Có ai biết một cách để phát hiện nếu máy chủ đã hết thời gian, kết nối lại và tiếp tục truyền dữ liệu? Tôi đang sử dụng thư viện Python ftp để truyền tải.Cách phát hiện thời gian chờ máy chủ ftp trong Python

Cảm ơn

+1

Bạn nhận được loại phản hồi nào (nếu có)? Có phải nó là [một trong 400 mã] (http://en.wikipedia.org/wiki/List_of_FTP_server_return_codes) không? –

Trả lời

4

Bạn có thể chỉ cần xác định một thời gian chờ cho các kết nối, nhưng đối với timeout trong quá trình chuyển tập tin hoặc các hoạt động khác nó không đơn giản như vậy.

Vì phương pháp lưu trữ và truyền lại cho phép bạn cung cấp gọi lại, bạn có thể triển khai bộ đếm giờ giám sát. Mỗi lần bạn nhận dữ liệu, bạn sẽ đặt lại bộ hẹn giờ. Nếu bạn không nhận được dữ liệu ít nhất mỗi 30 giây (hoặc bất cứ điều gì) cơ quan giám sát sẽ cố gắng hủy bỏ và đóng phiên FTP và gửi một sự kiện trở lại vòng lặp sự kiện của bạn (hoặc bất kỳ điều gì).

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() 

Nếu điều này không đủ tốt, có vẻ như bạn sẽ phải chọn một API khác. Khuôn khổ Xoắn có FTP protocol support cho phép bạn thêm logic hết thời gian chờ.

Các vấn đề liên quan