V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
kysida
V2EX  ›  问与答

python 封装多进程处理类需要注意哪些地方?

  •  1
     
  •   kysida · 2016-12-02 17:56:31 +08:00 · 2315 次点击
    这是一个创建于 2905 天前的主题,其中的信息可能已经有所发展或是发生改变。

    需求:封装多进程模块 1.需要的时候记录日志记录整个业务场景 2.主进程能够自动唤醒僵尸进程 3.将进程编号加入回调函数

    问题: 1.记录整个多进程操作业务的场景,这怎么记,从哪下手? 2.主进程自动唤醒僵尸进程是怎么实现呢? 3.将进程编号加入回调函数,是怎么加的呢?有意义吗?

    求教下以上三个进程该如何入手,已经写过 n 遍,被打回几遍要重新写,现在无从下手。。。。 为了表示我不是伸手党以下是我的代码谢谢各位~~~

    
    import traceback
    import multiprocessing
    from lib_log import LibLog
    
    class MultiProcess(object):
    
        """
        多进程操作
        方法: worker
        返回类型: bool 返回内容 True
        接收参数:
            process_num:进程数量
            callback_func:多进程执行的函数
            arg :函数中的参数(无可忽略)
            kargs :函数中的参数是字典数据结构(无可忽略)
        e.g:
            mp = MultiProcess(10, func)
         or mp = MultiProcess(10, func, n)
            mp.worker()
        """
    
        rpc_log = LibLog()
    
        def __init__(self, process_num, callback_func, arg='', kwarg={}):
            self.process_num = process_num
            self.callback_func = callback_func
            self.arg = arg
            self.kwarg = kwarg
        def worker(self):
            jobs = []
            try:
                jobs_start_stime = self.__point_time()
                for i in xrange(self.process_num):
                    try:
               
                        jobs.append(multiprocessing.Process(target=self.callback_func,
                                                            args=(self.arg), kwargs=self.kwarg))
                    except:
                    	  traceback.print_exc()       
                for job in jobs:
                    job.start()
                job.join()
                return True
            except:
            	traceback.print_exc()
    
    2 条回复    2016-12-03 08:25:01 +08:00
    billlee
        1
    billlee  
       2016-12-03 00:08:52 +08:00
    需求不清楚要多沟通啊,感觉你自己都没弄懂到底要干什么
    1. 这是不是说业务是跨越了 master 和 worker? 如果是这样,你要考虑怎么从日志中区分出属于某个事务的日志,比如说给每个事务分配一个 ID? 打日志的时候加上
    2. 僵尸进程是不能唤醒的。你们说的是阻塞或者陷入死循环的进程吧,一般就是设置超时,超时的杀掉
    kysida
        2
    kysida  
    OP
       2016-12-03 08:25:01 +08:00
    @billlee 恩好的多谢了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   980 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 20:31 · PVG 04:31 · LAX 12:31 · JFK 15:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.