优化python搜索代码减少执行时间
我有一段代码,用来通过http将文件从我妈妈的电脑传输到我自己的电脑。 我首先为moms系统上的文件编制索引,然后将它们与系统上的文件进行匹配,如果搜索失败,它会将该文件传输到我的系统 我在小文件上测试了这段代码,它运行得很好,但我开始传输大文件夹,这比通过网络手动传输要花很多时间 我不知道这是什么问题是在我的网络中还是与代码有关优化python搜索代码减少执行时间,python,search,networking,file-transfer,Python,Search,Networking,File Transfer,我有一段代码,用来通过http将文件从我妈妈的电脑传输到我自己的电脑。 我首先为moms系统上的文件编制索引,然后将它们与系统上的文件进行匹配,如果搜索失败,它会将该文件传输到我的系统 我在小文件上测试了这段代码,它运行得很好,但我开始传输大文件夹,这比通过网络手动传输要花很多时间 我不知道这是什么问题是在我的网络中还是与代码有关 import requests import client_index import sever_index def transfer(url): files
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)
您正在为每次调用
search
打开my.txt
。而你应该打开它一次。您还应该优化文件列表中的搜索。您正在对mom.txt
中的每个条目执行O(N)
操作,该操作将为您提供O(N*M)
。使用简单的二进制搜索,您可以更快地执行此操作O(M*log(N))
。或者,您可以使用my.txt
设置,然后搜索文件将花费固定的时间。更重要的是,您可以将两个文件列表进行设置,然后从另一个文件列表中减去一个文件集
顺便说一句,正如我在评论中提到的,如果您在*nix环境下工作,您应该使用rsync。您可以使用Norton online backup,您可以在试用版中备份25GB。使用此功能,您可以从源PC备份所需的文件,并从目标PC中的web还原。
我发现使用简单脚本传输大型文件有以下缺点:
1.如何处理中间的连接中断
2.重新启动后如何恢复操作(如果因某种原因关闭电脑)
3.当然,与诺顿在线备份或rsync相比,这需要很长时间
4.您无法控制脚本的CPU/内存利用率,这可能会降低PC的速度为什么不直接使用rsync?它可以满足您的所有需求,而且速度相当快。关于您的问题,它可能与您的PHP环境有关。