优化python搜索代码减少执行时间

时间:2014-05-22 11:34:38

标签: python search networking file-transfer

我有一段代码用于通过http将文件从我的妈妈电脑传输到我自己的电脑。 我首先在我的妈妈系统上索引文件然后将它们与我系统上的文件匹配,如果搜索失败,它会将该文件传输到我的系统。

我在小文件上测试了这个代码它工作得很好但是我开始传输大文件夹比通过网络手动传输需要花费更多的时间。

我不知道这个问题在我的网络中是什么问题,或者是代码

import requests
import client_index
import sever_index
def transfer(url):
    files = {'userfile': open(url, 'rb')}
    tim = url.rsplit('/',1)
    payload = { 'lnk' : tim[0], 'bp' : client_index.rootDir}
    r = requests.post('http://192.168.1.3/upload_file.php',files=files,data=payload,stream=True)           
    print r.text    
    return
def search(str):
    found=0
    with open("my.txt") as f:
        for line in f:

            if str==line:
                found=1
                return
        if found==0:
            print(str)
            transfer(str[:-1])
    return
c=0

with open("my.txt") as fome:
        for line in fome:
            c=c+1
if c==0:
    with open("mom.txt") as fo:
            for line in fo:  
                transfer(line[:-1])
else:
    with open("mom.txt") as fo:
        for line in fo:
            search(line)

2 个答案:

答案 0 :(得分:1)

您为my.txt的每次通话开放search。而你应该打开一次。您还应优化文件列表中的搜索。您正在为O(N)中的每个条目执行mom.txt操作,该条目为您提供O(N*M)。通过简单的二进制搜索,您可以更快地完成O(M*log(N))。或者您可以从set中创建my.txt,然后搜索文件将需要一段时间。你甚至可以从两个文件列表中创建集合,然后只从另一个集合中减去一个集合。

正如我在评论中提到的那样,如果你在* nix env下工作,你应该使用rsync。

答案 1 :(得分:0)

您可以使用诺顿在线备份,在试用版中可以备份25GB。使用此功能,您可以从源PC备份所需文件,并从目标PC中的Web恢复。 我发现使用简单脚本传输大文件有以下缺点: 1.如何处理两者之间的连接丢失 2.重启后如何恢复运行(如果由于某种原因关闭了PC) 3.与诺顿在线备份或rsync相比,肯定会花费很长时间 4.您无法控制脚本上的CPU /内存利用率,这可能会降低您的PC速度