Python的并发处理:(一)并行运行多个互不相干的子进程

Python的并发处理:(一)并行运行多个互不相干的子进程

这是并发处理中最简单的一种情况。应用场景当然也很简单。一般会是这样:通过传递不同的参数,让同一个函数在同一时间内执行几种不同的任务,达到多任务并行的效果,提升吞吐量。
我们有这样一个要求:分别往2个文件中写入百W级数据,在串行状态下的脚本是这样的:
【code-1】

import time
     
'''
写文件
'''
def write_file(filename,num):
    target = open(filename, 'w')
    for i in range(1,num+1):
        target.write("%d line\n" % i)
     
if __name__ == '__main__':
    start = time.time()
    #100W
    write_file('1.txt', 1000000)
    #200W
    write_file('2.txt', 2000000)
     
    end = time.time()
    print str(round(end-start,3))+'s'


在我的机器上运行结果输出是:
6.557s
那么如果用多进程的方式呢:
【code-2】

import time
import multiprocessing
def write_file(filename,num):
    target = open(filename, 'w')
    for i in range(1,num+1):
        target.write("%d line\n" % i)
     
if __name__ == '__main__':
    start = time.time()
     
    p1 = multiprocessing.Process(target=write_file,args=('1.txt', 1000000))
    p2 = multiprocessing.Process(target=write_file,args=('2.txt', 2000000))
     
    #启动子进程
    p1.start()
    p2.start()
     
    #等待fork的子进程终止再继续往下执行,可选填一个timeout参数
    p1.join()
    p2.join()
     
    end = time.time()
    print str(round(end-start,3))+'s'


输出结果:3.418s
这个例子说明了如何以单独进程的形式创建和启动函数。有时候更习惯想把它定义成一个对象。像下面这样:
【code-3】

import time
import multiprocessing
     
'''
新的类继承自Process类
'''
class Write_file(multiprocessing.Process):
    def __init__(self,filename,num):
        multiprocessing.Process.__init__(self)
        self.filename = filename
        self.num = num
    def run(self):
        target = open(self.filename, 'w')
        for i in range(1,self.num+1):
            target.write("%d line\n" % i)
     
if __name__ == '__main__':
    start = time.time()
     
    p1 = Write_file('1.txt', 1000000)
    p2 = Write_file('2.txt', 1000000)
     
    p1.start()
    p2.start()
     
    p1.join()
    p2.join()
     
    end = time.time()
    print str(round(end-start,3))+'s'


当然,例程2和3是完全等价的。

  • 10
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值