2020-2-28(92)

#python跨平台进程multiprocessing模块
#1.创建进程

import multiprocessing

def do(n):
    name = multiprocessing.current_process().name
    print("当前进程名:",name)
    print("当前是第%s个进程" %n)

if __name__ == "__main__":
    numlist = []
    for i in range(5):
        print("生成子进程")
        p = multiprocessing.Process(target=do,args=(i,))
        print("生成完成")
        numlist.append(p)
        p.start()
        #p.join()
        print("Done")
    print(numlist)

#join()表示等待子进程结束后再继续往下执行,通常用于进程间同步

#2.多进程模板程序

import multiprocessing

def func1(n):
    result = 0
    for i in range(n):
        result += i
    return result
    
def func2(n):
    result = 0
    for i in range(n):
        result -= i
    return result

if __name__ == "__main__":
    p1 = multiprocessing.Process(target=print(func1(100)),name="p1")
    p2 = multiprocessing.Process(target=print(func2(100)),name="p2")
    p1.start()
    p2.start()
    p1.join()
    p2.join()
    print("Done")

#2.进程池

import multiprocessing

def func(n):
    print(multiprocessing.current_process())
    return n*n
    
if __name__ == "__main__":
    pool = multiprocessing.Pool(processes=4)
    print(pool.map(func,range(18)))

#3.测试单进程和多进程程序执行的效率

import multiprocessing
import time

def func(n):
    time.sleep(0.01)
    return n*n

if __name__ == "__main__":
    pool = multiprocessing.Pool(multiprocessing.cpu_count())
    star_time = time.time()
    pool.map(func,range(1000))
    print("多进程耗时:",time.time()-star_time)
    
    start_time = time.time()
    list(map(func,range(1000)))
    print("单进程耗时:",time.time()-star_time)


#多进程耗时: 1.5492820739746094
#单进程耗时: 12.274648666381836

#实现给map中的函数传递多个参数

import multiprocessing

class Person:
    def __init__(self,a,b):
        self.a = a
        self.b = b

def func(obj):
    return obj.a * obj.b
    
if __name__ == "__main__":
    pool = multiprocessing.Pool(processes=4)
    params = [Person(i,i) for i in range(10)]
    print(pool.map(func,params))

#统计目录下文件中字符数和行数
#要求:并行统计指定目录下所有文件(.txt/.py)中的字符数和行数,
#将结果写入res.txt文件中,每个文件一行
#格式: filename:lineNumber,charNumber

import multiprocessing
import os

def count(filename):
    with open(filename,encoding="utf-8") as fp:
        lines = fp.readlines()
        char_num = 0
        for line in lines:
            char_num += len(line.strip())
    result = filename+":"+str(len(lines))+","+str(char_num)+"\n"
    return result
    
if __name__ == "__main__":
    filename_list = []
    for root,dirs,files in os.walk("d:\\2019"):
        for file in files:
            path = os.path.join(root,file)
            if os.path.splitext(path)[1] in [".txt",".py"] :
                filename_list.append(path)
    print(filename_list)
    pool = multiprocessing.Pool(processes=4)
    r = pool.map(count,filename_list)
    print(r)   
    with open("d:\\2019\\res.txt","w",encoding="utf-8") as fp:
        fp.writelines(r)
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值