Я пытаюсь использовать несколько файлов, используя ftp. Однако, вместо того, чтобы загружать несколько разных файлов, он загружает один файл несколько раз. Что с этим не так?Загрузка нескольких файлов с использованием ftplib и многопроцессорной обработки
import fnmatch
import os
from multiprocessing import Pool
import ftplib
file_extensions = [ '*.mp4', '*wmv' ]
matches = []
#match = []
exclude = "/ext_hdd/download/incomplete"
def upload(file):
ftp = ftplib.FTP('ftp.domain.com')
ftp.login("username","password")
f = open(match,'rb')
print ("uploading" + match)
ftp.storbinary('STOR %s' %match, f)
f.close()
ftp.quit()
for root, dirs, filenames in os.walk("/ext_hdd/download"):
dirs[:] = [d for d in dirs if d not in exclude]
for extension in file_extensions:
for filename in fnmatch.filter(filenames, extension):
matches.append(os.path.join(root, filename))
(match for match in matches if file_size > 209715200)
#print matches
for match in matches:
pool = Pool(2)
pool.map(upload,match)
Что такое x.get()? Кроме того, где я должен вставить раздел ftplib? –
Будет здорово, если бы вы могли переработать мой примерный код, это могло бы помочь мне понять всю картину, в том числе, где вставить раздел сравнения размера файла и раздел загрузки ftp. Благодарю. –
@ ThomasG.Lau Я обновил пример, чтобы показать функцию «upload». Надеюсь, это уточнит ваш второй вопрос. 'x.get()' должен был сказать 'task.get()' (извините за это) и является вызовом ['AyncResult.get'] (https://docs.python.org/2/library/multiprocessing .html # multiprocessing.pool.AsyncResult.get). Он используется для ожидания завершения функции, которую вы передали в pool.apply_async, и возврата ее результата. Я просто использую его, чтобы вы увидели, произошла ли ошибка в 'upload'. Если вы оставите вызов 'task.get()', они будут выполняться молча, что может сбить с толку. – dano