2014-05-22 73 views
-1

我有一段代码用于通过http将妈妈电脑上的文件传输到我自己的电脑上。 我首先索引我的妈妈系统上的文件,然后将它们与我系统中存在的文件进行匹配,如果搜索失败,它会将该文件传输到我的系统。优化python搜索代码,减少执行时间

我在小文件上测试了它的代码,但是我开始传输大文件夹比通过网络手动传输需要更多的时间。

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

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) 
+0

为什么不使用rsync?它可以满足您的所有需求并且速度非常快。关于你的问题,它可能与你的PHP环境有关。 –

回答

1

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

顺便说一句,正如我在评论中提到的,如果你在* nix env下工作,你应该使用rsync。

0

您可以使用诺顿在线备份,您可以在试用版中备份25GB。使用此功能,您可以从源PC备份所需的文件,并通过目标PC从网络恢复。 我发现使用简单脚本传输大文件时存在以下缺陷: 1.如何处理连接中断 2.如何在重新启动后恢复操作(如果因某种原因关闭了电脑) 3.确保与诺顿在线备份或rsync相比,需要很长时间4.您无法控制脚本中的CPU /内存使用率,这可能会降低您的PC速度