Я хочу отправлять файлы с помощью пула из мультипроцессора, с открытием только одного FTP-соединения.Итак, я попытался сделать это с кодом ниже:
import multiprocessing
from ftplib import FTP
import os
import glob
ftp = FTP()
def ftp_upload(filename):
with open(filename, 'rb') as f:
ftp.storlines('STOR %s' % remote_path+filename, f)
def main():
while True:
if retry:
file_list=sorted(glob.glob('*.txt'))
pool = multiprocessing.Pool(processes=5)
pool.map(ftp_upload, file_list)
pool.close()
pool.join()
else:
ftp.connect('host', port)
ftp.login('login','pass')
if __name__ == '__main__':
main()
Но этот код выполняется с ошибкой, трассировка здесь:
multiprocessing.pool.RemoteTraceback:
"""
Traceback (most recent call last):
File "C:\Users\user\AppData\Local\Programs\Python\Python37-32\lib\multiprocessing\pool.py", line 121, in worker
result = (True, func(*args, **kwds))
File "C:\Users\user\AppData\Local\Programs\Python\Python37-32\lib\multiprocessing\pool.py", line 44, in mapstar
return list(map(*args))
File "C:\Users\user\Desktop\parallel_FTP.py", line 20, in ftp_upload
ftp.storlines('STOR %s' % remote_path+filename, f)
File "C:\Users\user\AppData\Local\Programs\Python\Python37-32\lib\ftplib.py", line 529, in storlines
self.voidcmd('TYPE A')
File "C:\Users\user\AppData\Local\Programs\Python\Python37-32\lib\ftplib.py", line 277, in voidcmd
self.putcmd(cmd)
File "C:\Users\user\AppData\Local\Programs\Python\Python37-32\lib\ftplib.py", line 199, in putcmd
self.putline(line)
File "C:\Users\user\AppData\Local\Programs\Python\Python37-32\lib\ftplib.py", line 194, in putline
self.sock.sendall(line.encode(self.encoding))
AttributeError: 'NoneType' object has no attribute 'sendall'
"""
- Как я могу передать ftpв функцию ftp_upload ()?