Все еще связано со следующим Вопросом ...
Параллельная загрузка с мультипроцессором и PySftp
Я хотел бы знать, как распечатать успешные загрузки? Мое намерение - добавить запись в таблицу базы данных, чтобы создать журнал загруженных файлов с именем, датой и временем.
Есть идеи? Я искал несколько примеров и провел несколько тестов, но, похоже, мой модуль загрузки не может ничего вернуть или я не использую правильный код для чтения результатов и их распечатки.
Функция ЗАГРУЗКИ
import pysftp
import os
def fdownload(vfileaux):
vtmpspl = vfileaux.split(',')
vfile = vtmpspl[0]
vhost = vtmpspl[1]
vlogin = vtmpspl[2]
vpwd = vtmpspl[3]
vftppath = vtmpspl[4]
vlocalpath = vtmpspl[5]
os.chdir(vlocalpath)
os.getcwd()
cnopts = pysftp.CnOpts()
cnopts.hostkeys = None
vfilecheck = vlocalpath + '/' + vfile
if not os.path.isfile(vfilecheck):
vftpaux = pysftp.Connection(host=vhost, username=vlogin, password=vpwd, cnopts=cnopts)
vftpaux.cwd(vftppath)
vftpaux.get(vfile, preserve_mtime=True)
vftpaux.close()
return vnename + "_" + vdatetime
else:
pass
ОСНОВНАЯ функция
from datetime import *
from ffilelist import *
from ffilefilter import *
from developing.fdownload import *
import pymysql.cursors
from concurrent.futures import ThreadPoolExecutor, wait, as_completed
def main():
print(datetime.datetime.now(), 'Loading variables...')
vhostlist = {}
vloginlist = {}
vpwdlist = {}
vftppathlist = {}
vlocalpathlist = {}
vhostaux = '10.11.12.13'
vhostlist[vhostaux] = vhostaux
vloginlist[vhostaux] = 'admin'
vpwdlist[vhostaux] = 'pass1234'
vftppathlist[vhostaux] = '/export/home'
vlocalpathlist[vhostaux] = 'd:/test/'
vfilelist1 = []
global vfilelist2
vfilelist2 = []
for vhosttmp in vhostlist:
print(datetime.datetime.now(), 'Starting to process ' + vhosttmp + "...")
global vhost
global vlogin
global vpwd
global vftppath
global vlocalpath
vhost = vhostlist[vhosttmp]
vlogin = vloginlist[vhosttmp]
vpwd = vpwdlist[vhosttmp]
vftppath = vftppathlist[vhosttmp]
vlocalpath = vlocalpathlist[vhosttmp]
vfilelist1 = ffilelist(vhost, vlogin, vpwd, vftppath)
print(datetime.datetime.now(), 'Vectorizing download file list...')
for vfile in vfilelist1:
vfilelist2.append(vfile + ',' + vhost + ',' + vlogin + ',' + vpwd + ',' + vftppath + ',' + vlocalpath)
vfilelist0 = ffilefilter(vfilelist2)
print(datetime.datetime.now(), 'Starting simultaneous downloads...')
vpool = concurrent.futures.ProcessPoolExecutor(max_workers=8)
vpool.map(fdownload, vfilelist0)
vpool.shutdown()
print(datetime.datetime.now(), 'Downloads finished!')
Строка INSERT для журнала, который будет храниться в MARIADB, выглядит примерно так. Уже проверено и работает. Для использования в ОСНОВНОЙ функции, как только я найду решение для получения списка загруженных файлов.
vconn = pymysql.connect(host='localhost', user='root', password='pass1234', db='test')
vcurs = vconn.cursor()
vsql = "INSERT INTO `logs_download` (`ne`, `datetime`) VALUES (\'" + vnename + "\', \'" + vdatetime + "\')"
vcurs.execute(vsql)
vconn.commit()