python 多进程同步运行同一个函数

参考:Python的并发处理:(一)并行运行多个互不相干的子进程_dai451954706的专栏-CSDN博客Python的并发处理:(一)并行运行多个互不相干的子进程转自:http://1.seanxu.sinaapp.com/?p=127这是并发处理中最简单的一种情况。应用场景当然也很简单。一般会是这样:通过传递不同的参数,让同一个函数在同一时间内执行几种不同的任务,达到多任务并行的效果,提升吞吐量。我们有这样一个要求:分别往2个文件中写入百W级数据,在串行状态下的脚本是这样的:https://blog.csdn.net/dai451954706/article/details/31399317

运行时间和上面博主的有很大不同, 结论也完全不同,可能是硬件的原因。

结论,运行时间:不用进程 > 函数形式进程 > 类形式进程

目录

1. 不用进程:

2.函数形式multiprocessing.Process()

3. 类形式 multiprocessing.Process类


1. 不用进程:

 依次写入两个文件,运行时间:1.572s

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')

2.函数形式multiprocessing.Process()

将函数作为参数,丢入进程。运行时间:1.082s,减少了1/3的时间

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. 类形式 multiprocessing.Process类

继承Process类,运行时间:0.57

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)


class WriteFile(multiprocessing.Process):
    def __init__(self, filename, num):
        multiprocessing.Process.__init__(self)
        self.filename = filename
        self.num = num

    def run(self):
        write_file(self.filename, self.num)


if __name__ == '__main__':
    start = time.time()

    p1 = WriteFile('1.txt', 1000000)
    p2 = WriteFile('2.txt', 1000000)

    p1.start()
    p2.start()

    p1.join()
    p2.join()

    end = time.time()
    print(str(round(end - start, 3)) + 's')

猜你喜欢

转载自blog.csdn.net/jizhidexiaoming/article/details/121287575