python之多进程-创建(一)

多进程处理(Multiprocessing)

介绍

python的多进程处理,这里使用的是multiprocessing模块;首先要了解Cpython解释器中GIL(global interpreter lock)对python处理多线程程序的影响,然后为了提高并发任务(前提是你需要)运行效率

实例1: 使用一般函数构建

from multiprocessing import Process
from datetime import datetime
import time


def job(name, sleep_time):
    """
    任务
    """
    print('{name}任务开始'.format(name=name))
    time.sleep(sleep_time)
    print('{name}任务结束'.format(name=name))


def main():
    pa = Process(target=job, args=('A', 5,))
    pb = Process(target=job, args=('B', 5,))
    pa.start()
    pb.start()
    pa.join()
    pb.join()


if __name__ == '__main__':
    begin = datetime.now()
    main()
    end = datetime.now()
    print('总耗时', end-begin)   
总耗时 0:00:05.217374

实例2: 重构Process类构建

from multiprocessing import Process
from datetime import datetime
import time


class JobProcess(Process):
    """
    多进程自建任务
    """

    def __init__(self, name='default', sleep_time=0):
        """
        初始化函数
        参考[Process类自构](https://docs.python.org/2/library/multiprocessing.html#multiprocessing.Process)
        """
        Process.__init__(self)
        self.name = name
        self.sleep_time = sleep_time

    def run(self):
        """
        关键方法
        """
        print('{name}任务开始'.format(name=self.name))
        time.sleep(self.sleep_time)
        print('{name}任务结束'.format(name=self.name))


def main():
    pa = JobProcess(name='A', sleep_time=5)
    pb = JobProcess(name='B', sleep_time=5)
    pa.start()
    pb.start()
    pa.join()
    pb.join()


if __name__ == '__main__':
    begin = datetime.now()
    main()
    end = datetime.now()
    print('总耗时', end-begin)
总耗时 0:00:05.217374

备注:

  • 在windows和Linux环境使用Process重构类方法时有些差异,在windows上会有类无法序列化的问题
  • 使用logging模块
    • 控制台打印时可以使用公共的logger对象
    • 向文件中写日志时可以使用logging的filter加上multiprocessing的queue
posted @ 2019-10-22 21:08  faronzz  阅读(93)  评论(0编辑  收藏  举报