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ờ.
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? –