为了账号安全,请及时绑定邮箱和手机立即绑定

用户增长量统计项目实现过程踩坑总结

标签:
Python


    最近一段时间在做一个用户访问量统计的小项目,主要实现根据打包好的rdb文件进行解析、统计,然后存到pika,然后取到用户key并统计访问量的增长并将数据推到 grafana 进行展示。在代码实现及部署过程中遇到了一些问题,总结出来,以备后续参考。欢迎批评指正,共同学习!

一、在函数中使用多进程正常执行,在类中出现报错 

wKiom1mVNwGimnB4AAAt-eVyo8c717.png解决方式如下:

1、导入模块: 

import types

import copy_reg

2、增加函数 

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)

3、在类中增加如下方法 

def __init__(self):

    self.__result = []

def result_collector(self, result):

    self.__result.append(result)

二、多进程的重复使用 

    在实现Redis key 的读写采集过程中,在数据采集中用到多进程提高效率,在得到结果往 pika 中存储 key 时,为提高效率,想采用多进程,但测试发现多进程嵌套使用多进程,会出现如下问题 :

    Queue objects should only be shared between processes through inheritance

后来考虑到往pika中存数据属于io密集型的操作,因此,采用了多线程,解决了这一问题。这里涉及到多线程如何使主进程等待多个子线程执行完毕,解决方式如下: 

t_objs = []

for i in range(100):

    t = threading.Thread(target=self.batch_send_pika,args=(set_key, redis_port, all_batch_message[i]))

    t.start()

    t_objs.append(t)

for t in t_objs:

    t.join() #等待线程的执行结果

三、多进程之间多个Queue实现数据共享

    在实现用户读写访问量统计的过程中,由于每条产品线涉及多个端口,每条产品线又有多条规则,为了提高效率,因此对同一条产品线的不同端口采用多进程来实现,要统计同一产品线的用户增长量,就需要对同一规则不同端口之间的数据进行汇总求和,这里就涉及到每条规则启动一个Queue,对不同的端口采集到的数据存到Queue中,然后进行统计。因为要启动多个Queue,还要保证数据和的准确性,这里遇到了一些坑。尝试通过循环拼接字符串启动Queue、尝试过将Queue启动后加入列表作为参数进行传递使用,但是都没有成功,后来通过查资料学习,解决了这一问题。解决方式如下: 

from multiprocessing import Queue,Manager

    

q_list = []

for i in range(len(rule_list)):

    q_name = "q" + str(i)

    manager = Manager()

    q_name = manager.Queue()

    q_list.append(q_name)

然后将q_list作为参数进行传递即可 

四、crontab报错

在使用计划任务时未修改成功,遇到如下报错

crontab: installing new crontab

crontab: error while writing new crontab to /var/spool/cron/tmp.XXXXa2LhEO

crontab: edits left in /tmp/crontab.rEpgqL

解决方式如下:

查看磁盘空间和inode节点是否用尽

wKioL1mVPAiDWFGNAAAswvR6H-Y647.png

wKiom1mVPAnDuE68AAArFUxvrng878.png

这里发现/var 目录磁盘空间已经用尽将/var 下无用的文件进行删除,解决了这一问题

wKioL1mVPAnz3xP2AAAGrlzbHtw972.png

©著作权归作者所有:来自51CTO博客作者帅宇的原创作品,如需转载,请注明出处,否则将追究法律责任

crontab多线程多进程


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消