定时、多进程模板封装

本文介绍了一种方法,通过简单编辑logic业务逻辑,可以快速创建具备定时和多进程功能的程序,提供了一种高效的任务执行解决方案。
摘要由CSDN通过智能技术生成
只需简单的编辑logic业务逻辑,即可拥有一个定时,多进程程序
# Time    : 1/18/2019 9:15 AM
# Author  : Luzaofa

import time
import types
import copy_reg
import datetime
import multiprocessing as mp
from apscheduler.schedulers.blocking import BlockingScheduler


def _pickle_method(m):
    if m.im_self is None:
        return getattr, (m.im_class, m.im_func.func_name)
    else:
        return getattr, (m.im_self, m.im_func.func_name)


copy_reg.pickle(types.MethodType, _pickle_method)


class Demo(object):

    def __init__(self):
        pass

    def data_mp(self, func, mass):
        '''进程池'''
        pool = mp.Pool(processes=4)
        for i in mass:
            pool.apply_async(func, args=(i,))
        pool.close()
        pool.join()

    def scheduler(self, func, args):
        '''时间管理器'''
        sched = BlockingScheduler()
        print '初次执行时间: ', (datetime.datetime.now() + datetime.timedelta(minutes=1)).strftime("%Y-%m-%d %H:%M:%S")
        sched.add_job(func, 'interval', seconds=60, args=(args,), id='my_job1')  # 每隔一分钟执行一次
        # sched.add_job(func, 'cron', day_of_week='mon-fri', hour=17, minute=00, args=mass, id='my_job2')  # 工作日下午5点执行
        sched.start()

    def log(self, fileName, mass):
        '''日志'''
        with open(fileName, 'a+') as f:
            f.writelines(str(mass) + '\n')
            f.flush()

    def logic(self, mass):
        '''
        业务逻辑
        :param mass:
        :return:
        '''
        self.log('log.txt', mass)

    def main(self, mass):
        '''
        主入口
        :return:
        '''
        start = time.time()
        self.data_mp(self.logic, mass)
        end = time.time()
        print('业务处理总耗时:%s 秒!' % (end - start))
        print '下次执行时间: ', (datetime.datetime.now() + datetime.timedelta(minutes=1)).strftime("%Y-%m-%d %H:%M:%S")


if __name__ == '__main__':
    print 'Start!'
    demo = Demo()
    mass = [i for i in range(100)]

    # demo.main(mass)  # 多进程

    demo.scheduler(demo.main, args=mass)  # 定时 + 多进程

    print 'END'

效果图如下:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值