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

2016-12-02 17:56:31 +08:00
 kysida

需求:封装多进程模块 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()
2274 次点击
所在节点    问与答
2 条回复
billlee
2016-12-03 00:08:52 +08:00
需求不清楚要多沟通啊,感觉你自己都没弄懂到底要干什么
1. 这是不是说业务是跨越了 master 和 worker? 如果是这样,你要考虑怎么从日志中区分出属于某个事务的日志,比如说给每个事务分配一个 ID? 打日志的时候加上
2. 僵尸进程是不能唤醒的。你们说的是阻塞或者陷入死循环的进程吧,一般就是设置超时,超时的杀掉
kysida
2016-12-03 08:25:01 +08:00
@billlee 恩好的多谢了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/324877

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX