ftplibを使用して、(64ビットWindows 7を実行している)コンピュータからLinuxサーバーに一連のファイルを転送しようとしています。プロセスは、テストコードのこのスニペットに似ている(サーバアドレス、ユーザ名、およびパスワードは明らかに、変更された):Pythonのftplibを介したファイル転送が非確定的にタイムアウトする
import ftplib
import os.path
import os
host = "some.ftp.server.com"
username = "username"
password = "password"
outDir = "/some/output/directory"
def transfer_files():
ftp = ftplib.FTP(host, username, password)
ftp.cwd(outDir)
names = ftp.nlst()
if "transferred" not in names:
ftp.mkd("transferred")
ftp.cwd("transferred")
names = ftp.nlst()
# Transfrer arbitrary files to the server
filesToTransfer = os.listdir('.')
for fName in filesToTransfer:
if not os.path.isfile(fName):
continue
if fName in names:
ftp.delete(fName)
with open(fName, 'r') as f:
ftp.storbinary("STOR %s" % fName, f)
print fName
ftp.quit()
print "Done"
if __name__ == "__main__":
transfer_files()
私が見ている動作は、ほとんどのファイルを迅速かつ成功裏に移すということですが、ランダムにファイルの意志タイムアウトには、私は、プログラムを実行するたびに異なる
Traceback (most recent call last):
File "Test.py", line 37, in <module>
transfer_files()
File "Test.py", line 29, in transfer_files
ftp.storbinary("STOR %s" % base, f)
File "C:\Python27\Lib\ftplib.py", line 471, in storbinary
conn = self.transfercmd(cmd, rest)
File "C:\Python27\Lib\ftplib.py", line 376, in transfercmd
return self.ntransfercmd(cmd, rest)[0]
File "C:\Python27\Lib\ftplib.py", line 335, in ntransfercmd
conn = socket.create_connection((host, port), self.timeout)
File "C:\Python27\Lib\socket.py", line 575, in create_connection
raise err
socket.error: [Errno 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond
ファイルということ、それは、常に1つのファイルまたは別に発生するようです:代わりにアウト時間とは、以下の例外を発生させます。転送がランダムにタイムアウトするのはなぜですか、これを防ぐには何ができますか?
タイムアウト時間を1秒に変更し、成功するまで転送を再試行するように見えます。転送が "ランダムに"タイムアウトすると、何が起こっているのでしょうか? –
すべてのネットワーク要求は、ワイヤ(またはWiFi、または光ファイバケーブル)を介して送信される一連のパケットに分解されます。タイムアウトは、コンピュータが相手方のコンピュータから、そのパケットを受け取ったという肯定応答を受信しなかったときに発生します。そのうちのいくつかは途中で失われたか、途中で応答が失われたためです。 ほとんどの目的のために、コンピュータプログラムは「理想的に」動作しますが、データ転送は物理的な世界の不完全さをもたらし、適切なデータ転送を妨げます。 –