#1-进程 #from threading import * import multiprocessing import time def test1(): for i in range(5000000): print("-----test1---%d---"%i) time.sleep(1) def test2(): for i in range(5000000): print("-----test2---%d---"%i) time.sleep(1) def main(): t1 = multiprocessing.Process(target = test1) t2 = multiprocessing.Process(target = test2) t1.start() t2.start() if __name__ == "__main__": main()
ps -aux 查看进程
kill +进程号 关闭某进程
进程、线程区别:
进程是资源分配的单位,线程是调度的单位。
#进程-利用队列实现进程间通讯 import multiprocessing import time def test1(q): array = [11,22,33,44,55,66,77,88] for i in array: q.put(i) # 满了之后等待 #if not q.full(): #如果队列满了,直接跳过去 #q.put_nowait(i) #往队列插入数据时,发现队列满了之后不等待,报错 print("%d in queue"%i) def test2(q): while True: temp = q.get(q) #空了之后等待, print(temp) def main(): q = multiprocessing.Queue(4) t1 = multiprocessing.Process(target = test1,args = (q,)) t2 = multiprocessing.Process(target = test2,args = (q,)) t1.start() t2.start() if __name__ == "__main__": main()
# 进程-进程池 from multiprocessing import Pool import os,time,random def worker(msg): t_start = time.time() print("%s开始执行,进程号为%d"%(msg,os.getpid())) time.sleep(random.random()*2) t_stop = time.teme() print(msg,"执行完毕,耗时%0.2f"%(t.stop - t_start)) po = Pool(3) for i in range(0,10): po.apply_async(worker,(i,)) print("---start---") po.close() po.join() print("--------end--------")
#4-用进程池实现多任务文件夹拷贝 import multiprocessing import os def copy_file(filename,old_folder_name,new_folder_name,q): fo = open(old_folder_name+"/"+filename,"rb") content = fo.read() fo.close() fn = open(new_folder_name+"/"+filename,"wb") fn.write(content) fn.close() #print("复制完成文件"+filename) q.put(filename) def main(): old_folder_name = input("请输入要拷贝的文件夹:") try: new_folder_name = "[复件]"+old_folder_name os.mkdir(new_folder_name) except: pass po = multiprocessing.Pool(8) q = multiprocessing.Manager().Queue() file_names = os.listdir(old_folder_name) for file in file_names: print(file) po.apply_async(copy_file,(file,old_folder_name,new_folder_name,q)) po.close() #po.join() totle = 0 sum_t = len(file_names) while True: fname = q.get() totle +=1 #print(totle) print("%f"%(totle/sum_t)) if totle>=sum_t: break if __name__ == "__main__": main()