私はPythonのマルチプロセッシングを使用して、FTPを使用して一括ダウンロードを実行しています。ただし、5つを超えるftpセッションを開こうとすると、EOFErrorが発生します。これは、開いているセッションが多すぎるためにホストが切断していることを意味します。
私が見る唯一の解決策は、単一のFTPオブジェクトを開き、それを必要なメソッドに渡すことです。問題は、マルチプロセッシングではピクルスを使用してオブジェクトを移動し、FTPオブジェクトをピクルスにできないため、これが不可能なことです。したがって、私の質問は、FTPオブジェクトをピクルスにする方法を見つけることによってこれを回避することが可能かどうかです。
私のコードは次の形式です。
def get_file(name):
#code here
def worker(name_list, out_q):
lst = []
for name in name_list:
lst.append(get_file(name))
out_q.put(lst)
if __name__ == '__main__':
#est ftp cnxn
ftp = FTP('ftp.blah.blah', 'anonymous', 'meow')
#multiprocessing code here
get_file defはftp接続にアクセスする必要があり、if __name__ == '__main__'
ブロックの外に置くと、プロセスがコードを実行するたびに新しいftp接続が作成されます。