编写程序,使用多线程技术把源文件夹及其子文件夹中所有内容都复制指定的目标文件夹中。要求该程序能够通过命令行参数来指定源文件夹和目标文件夹以及线程数量。
时间: 2023-07-29 09:11:23 浏览: 60
以下是一个Python程序,使用多线程技术将源文件夹中所有内容复制到目标文件夹中。该程序可以通过命令行参数指定源文件夹和目标文件夹以及线程数量。
```python
import os
import shutil
import argparse
import threading
def copy_file(src_file, dst_file):
shutil.copy2(src_file, dst_file)
def copy_files(src_dir, dst_dir, num_threads):
total_files = 0
for dir_path, dir_names, file_names in os.walk(src_dir):
total_files += len(file_names)
files_per_thread = total_files // num_threads + 1
thread_list = []
for i in range(num_threads):
start_index = i * files_per_thread
end_index = (i + 1) * files_per_thread
thread_list.append(threading.Thread(target=copy_files_worker, args=(src_dir, dst_dir, start_index, end_index)))
for thread in thread_list:
thread.start()
for thread in thread_list:
thread.join()
def copy_files_worker(src_dir, dst_dir, start_index, end_index):
file_count = 0
for dir_path, dir_names, file_names in os.walk(src_dir):
for file_name in file_names[start_index:end_index]:
src_file = os.path.join(dir_path, file_name)
dst_file = src_file.replace(src_dir, dst_dir)
os.makedirs(os.path.dirname(dst_file), exist_ok=True)
copy_file(src_file, dst_file)
file_count += 1
print(f'Copied {file_count} files')
def main():
parser = argparse.ArgumentParser(description='Copy all files from source to destination using threads')
parser.add_argument('source', type=str, help='path of source directory')
parser.add_argument('destination', type=str, help='path of destination directory')
parser.add_argument('num_threads', type=int, help='number of threads to use')
args = parser.parse_args()
copy_files(args.source, args.destination, args.num_threads)
if __name__ == '__main__':
main()
```
你可以在命令行中使用以下命令运行该程序:
```
python copy_files.py source_dir destination_dir num_threads
```
其中 `source_dir` 是源文件夹的路径,`destination_dir` 是目标文件夹的路径,`num_threads` 是要使用的线程数量。