from multiprocessing import Pool,Manager import time import os def copy_information(source_folder,dest_folder,file): start_time = time.time() try: fr = open('H:\pythonShangxuetang/'+source_folder+'/'+file,'r',encoding='utf-8') fw = open('./'+dest_folder+'/'+file,'w',encoding='utf-8') try: print('文件%s开始复制'%file) fr_content = fr.read() fw.write(fr_content) end_time = time.time() print('文件%s复制所用时间:%d'%(file,end_time-start_time)) except Exception as e: print('文件读写错误原因是:%s'%e.args) except Exception as d: pass finally: fr.close() fw.close() def main(): count =0 #定位具体所需要复制的文件夹 folder_name = input('请输入需要复制的文件夹:') #创建新的文件夹名称 newFolderName = folder_name +'复件' os.mkdir(folder_name+'复件') #获取文件夹中的所有文本 qu = Manager().Queue() #创建queue,进程间通信 file_names = os.listdir('H:\pythonShangxuetang/'+folder_name) qu.put(file_names) #创建进程池进行多任务配合 p1 = Pool(5) # for i in file_names: while True: if not qu.empty(): p1.apply_async(copy_information,args=(folder_name,newFolderName,qu.get())) count +=1 else: break print('文件复制start') p1.close() p1.join() print('一共复制%d个文件'%count) print('文件复制end') if __name__=='__main__': main()
问题:复制不成功,逻辑思维manager.queue让进程间通信,将目录文件夹下的文件信息保存到queue中。
一、程序
''' 线程的创建与使用 线程的创建方法二: 类包装 ''' # 调用线程模块 from threading import Thread class Mythread(Thread): def __init__(self, name): Thread.__init__(self) self.name = name def run(self): print('threading{0} start',format(self.name)) # 创建线程 t1 = Mythread("a") t2 = Mythread('b') # 启动线程 t1.start() t2.start()
二、运行结果
三、疑问
老师请问,问题如下图,谢谢老师解答!
老师tftp不也是服务器收不到数据的时候,客户端在发送数据,然后有确认包么,那个tftp是udp协议的么
from threading import Thread from time import sleep from threading import BoundedSemaphore def an_jian(num): lock.acquire() print(f"第{num}个人完成安检") sleep(2) lock.release() if __name__ == '__main__': lock = BoundedSemaphore(3) for i in range(10): t = Thread(target=an_jian, args=(f"{i+1}",)) t.start()
F:\Python\pythonProject\multi-processes\venv\Scripts\python.exe F:/Python/pythonProject/multi-processes/mp8-信号量.py
第1个人完成安检
第2个人完成安检
第3个人完成安检
第5个人完成安检第6个人完成安检第4个人完成安检
第7个人完成安检
第9个人完成安检
第8个人完成安检
第10个人完成安检
Process finished with exit code 0
请问一下老师, 为什么结果会不按着顺序来的? 是有什么bug吗
你这里的for循环调用函数不就相当于依次开启线程吗,那不久成了顺序执行调用函数吗.
并行的意义就失去了呀
count = i (): i (): count += (count)
实现的结果就相当与这段程序嘛,
没有体现多线程啊
多线程的话应该是
每个线程都运行 fun1
输出结果 是 三个 1000啊
优点在于 同时执行了三次 函数 fun1
这样嵌套和执行上面的代码效率是一样的啊
对项目没有实际提升啊老师
from multiprocessing import Manager, Process def fun(name,mg_list,mg_dic): mg_dic[name] = '尚学堂' mg_list.append('你好') if __name__ == '__main__': #创建进程管理器 with Manager() as mg: mg_list = mg.list() mg_dic = mg.dict() print(mg_list) print(mg_dic) p1 = Process(target=fun,args=('p1',mg_list,mg_dic)) p1.start() # p1.join()#等p1进程结束后,主进程继续执行 print('执行进程启动后~~') print(mg_list) print(mg_dic)
老师,为什么不写p1.join()会报系统找不到文件的错误呢
老师这里没用有else 或者 elif 为什么就能判断相反的条件呢
老师,我想请问一下是需要下载虚拟机是吗?输入查看不了Vmvare得ip
Tftpd32是构建一个服务器的作用吗
改成本机ip也没事吧
这个问题怎么改啊
按照视频里敲的,连接不上是啥原因
老师,我在网上搜到的Python的面试题,说是Python的内建数据类型怎么没有集合?
''' 验证线程运行速度 ''' # 调用创建线程的模块 from threading import Thread from time import time, sleep import threading # 定义一种方法 def func1(name): print('threading:{},start'.format(name)) sleep(3) print('threading:{},end'.format(name)) sleep(3) # 创建线程 t1 = Thread(target=func1, args=('t1',)) t2 = Thread(target=func1, args=('t2',)) if __name__=='__main__': print(threading.current_thread()) start = time() # 开始线程 t1.start() t2.start() #func1('t1') #func1('t2') end = time() t=end-start print(t)
老师请问,1.我的时间为什么不换行?2._thread是以前版本的吗?3.如下图。谢谢老师解答
老师,下边的类class里,已经初始化了一次def __init__(self,name);为什么还要再一次初始化红框里的内容呢?
一般格式不都是
def __init__(self,name,score)
self.name = name
self.score = score
这样来定义属性么,为什么还要这样反复初始化?
非常抱歉给您带来不好的体验!为了更深入的了解您的学习情况以及遇到的问题,您可以直接拨打投诉热线:
我们将在第一时间处理好您的问题!
关于
课程分类
百战程序员微信公众号
百战程序员微信小程序
©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园网站维护:百战汇智(北京)科技有限公司 京公网安备 11011402011233号 京ICP备18060230号-3 营业执照 经营许可证:京B2-20212637