【问题标题】:Optimising python search code reducing execution time优化python搜索代码减少执行时间
【发布时间】:2014-05-22 20:34:14
【问题描述】:

我有一个代码块,用于通过 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)

【问题讨论】:

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

标签: python search networking file-transfer


【解决方案1】:

您每次拨打search 都会打开my.txt。而你应该打开一次。此外,您应该优化文件列表中的搜索。您正在为mom.txt 中的每个条目执行O(N) 操作,这将为您提供O(N*M)。通过简单的二分搜索,您可以更快地做到这一点O(M*log(N))。或者您可以从my.txt 中创建一个set,然后搜索文件将花费固定时间。甚至更多,您可以从两个文件列表中创建集合,然后从另一个集合中减去一个集合。

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2017-02-15
      • 2019-12-14
      • 1970-01-01
      • 1970-01-01
      • 2017-04-19
      • 1970-01-01
      • 1970-01-01
      • 2012-11-09
      相关资源
      最近更新 更多