python ftp文件线程或多进程

时间:2012-10-02 20:00:13

标签: python

我们不断从我们的数据库生成数据文件,然后FTP'D到不同的位置。我们有一个poler,可以持续监视这个文件夹,一旦看到文件,就会发现FTP就是这些文件夹

目前这个过程是顺序的,当文件变大时,会有一个备份导致严重的延迟。我想并行处理事情,即一次FTP多个文件。我不确定线程​​/多处理以及这对我有用。

这是我的代码

import ftplib
ftp = ftplib.FTP('domainname.com')
ftp.login("username","password")
infiles = [file1,file2,file3.....filen]
for x in infiles:
    f = open(x,'rb')
    ftp.storbinary('STOR %s' %x, f)
    f.close()
ftp.quit() 

我在想,因为这是I / O密集型多处理是要走的路,任何关于如何继续的想法。

3 个答案:

答案 0 :(得分:4)

您可能会发现multiprocessing.Pool可用作更高级别的界面。

from multiprocessing import Pool
def upload(file): 
    ftp = ftplib.FTP('domainname.com')
    ftp.login("username","password")
    f = open(x,'rb')
    ftp.storbinary('STOR %s' %x, f)
    f.close()
    ftp.quit()


infiles = [file1,file2,file3.....filen]

pool = Pool(10) # submit 10 at once
pool.map(upload,infiles)

这很好,因为map的行为类似于内置函数。要进行调试,只需替换pool.map - > map

答案 1 :(得分:1)

我手边没有代码片段,但对于生产环境,我肯定会看Twisted。 Twisted并不是最容易上手的工具,但是它带来了很多你将在以后自己实现的东西。所以我建议至少花几个小时检查一下。

答案 2 :(得分:-1)

将耗时的任务放入函数

from multiprocessing import Process

def upload_file(filename):
    ftp = ftplib.FTP('domainname.com')
    ftp.login("username","password")
    f = open(x,'rb')
    ftp.storbinary('STOR %s' %x, f)
    f.close()
    ftp.quit() 

def multi_ftp():
    files = [file1, file2, ...]
    processes = []
    for filename in files:
        p = Process(target=filename, args=(filename,))
        p.start()
        processes.append(p)

    for p in processes:
        p.join()