Использование глобального объекта ftplib с многопроцессорными обработками AttributeError: у объекта 'NoneType' нет атрибута 'sendall' - PullRequest
0 голосов
/ 18 октября 2018

Я хочу отправлять файлы с помощью пула из мультипроцессора, с открытием только одного 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 ()?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...