python鸡肋的多线程创建、使用;文件的读写操作;操作文件的偏移量;线程锁的理解与使用。
"""
模拟迅雷,从多个地方同时下载一个文件,最后写入一个共同的文件
"""
from threading import Thread, Lock
import os,math
source = [
'/home/tarena/模板/',
'/home/tarena/视频/',
'/home/tarena/图片/',
'/home/tarena/文档/',
'/home/tarena/下载/',
]
download_path = '/home/tarena/下载/new/'
filename = input("请输入要下载的文件名称:")
source_have=[]
for path in source:
if os.path.exists(path+filename):
source_have.append(path+filename)
n = len(source_have)
if n == 0:
print("没有资源")
os._exit(0)
size = os.path.getsize(source_have[0])
j = size//n+1
print(j)
f0 = '/home/tarena/下载/000'
f = open(f0, 'wb')
def download(path, num):
g = open(path, 'rb')
g.seek(num)
data = g.read(j)
with lock:
f.seek(num)
f.write(data)
g.close()
print(555)
jobs = []
i = 0
lock = Lock()
for item in source_have:
t = Thread(target=download,args=(item, j*i))
jobs.append(t)
t.start()
i += 1
[i.join() for i in jobs]