qiaoliang0302

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

 

#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()

 

posted on 2019-07-22 20:23  qiaoliang0302  阅读(137)  评论(0编辑  收藏  举报