ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

初学Python:多线程脚本-使用Thread类创建(from threading import Thread)

2020-01-13 21:41:04  阅读:358  来源: 互联网

标签:file Thread Python que def func import 多线程 dir


#! /usr/bin/python
# -*- coding:utf-8 -*-

'''
------------------------------------------
function:
多线程复制图片

author: bingo
created: 2020-01-03
------------------------------------------
'''

from Queue import Queue
import threading
import shutil
import os
import time

count = 0
DEFAULT_THREAD_NUM = 10

file_dir = './11-bak'
fl = 'f.list'
target_dir = './11_copy/'

def ensure_dir_exits(path):
    try:
        os.makedirs(path)
    except OSError:
        if not os.path.isdir(path):
            raise

def generate_list(file_dir):
    global count
    f = open(fl, 'w+')
    for root, dirs, files in os.walk(file_dir):
        for each in files:
            count += 1
            f_name = os.path.join(root,each)
            f.write(f_name + '\n')
    f.close()



def generate_file_copy_func():
    def file_copy_func(file1):
        file2 = target_dir  + os.path.basename(file1) 
        shutil.copy(file1, file2)

    return file_copy_func

def work(que, func):
    while True:
        arg = que.get()
        func(arg)
        if que.qsize()%100 == 0:
            print (count-que.qsize())
        que.task_done()

def run(File_l, func):
    que = Queue()
    f = open(File_l, 'r')
    for line in f:
        l = line.strip()
        que.put(l)

    
    for num in range(DEFAULT_THREAD_NUM):
        t = threading.Thread(target = work,args = (que,func))
        t.daemon = True 
'''
个人理解:daemon如果默认false,work()函数中会一直无限循环,不会结束,task_done和join()配合使用只是通知队列任务已经全部完成;设置成true以后,队列处理完,子线程会停止
'''
        t.start()
    
    while que.unfinished_tasks > 0:
        time.sleep(1)
    
    que.join()

def main():
    
    ensure_dir_exits(target_dir)
    generate_list(file_dir)
    func = generate_file_copy_func()
    run(fl,func)

main()
为在旦夕 发布了35 篇原创文章 · 获赞 1 · 访问量 5037 私信 关注

标签:file,Thread,Python,que,def,func,import,多线程,dir
来源: https://blog.csdn.net/bingozb/article/details/103964625

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有