你不知道的CS模式的进程管理工具,状态监测、项目启停一目了然!

Python95

(摘自百度百科)Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。它是通过fork/exec的方式把这些被管理的进程当作supervisor的子进程来启动,这样只要在supervisor的配置文件中,把要管理的进程的可执行文件的路径写进去即可。也实现当子进程挂掉的时候,父进程可以准确获取子进程挂掉的信息的,可以选择是否自己启动和报警。supervisor还提供了一个功能,可以为supervisord或者每个子进程,设置一个非root的user,这个user就可以管理它对应的进程。

你不知道的CS模式的进程管理工具,状态监测、项目启停一目了然!

【阅读全文】

Supervisor安装

'''
环境:Centos7
安装wget:yum install wget
下载Supervisor源码包
'''
# [root@localhost software]# yum install wget
# 已加载插件:fastestmirror
# Loading mirror speeds from cached hostfile
#  * base: mirror.lzu.edu.cn
#  * extras: mirror.lzu.edu.cn
#  * updates: mirrors.163.com
# 正在解决依赖关系
# --> 正在检查事务
# ---> 软件包 wget.x86_64.0.1.14-18.el7_6.1 将被 安装

# [root@localhost software]# wget https://files.pythonhosted.org/packages/d3/7f/c780b7471ba0ff4548967a9f7a8b0bfce222c3a496c3dfad0164172222b0/supervisor-4.2.2.tar.gz
# --2021-09-24 15:45:28--  https://files.pythonhosted.org/packages/d3/7f/c780b7471ba0ff4548967a9f7a8b0bfce222c3a496c3dfad0164172222b0/supervisor-4.2.2.tar.gz
# 正在解析主机 files.pythonhosted.org (files.pythonhosted.org)... 151.101.77.63, 2a04:4e42:12::319
# 正在连接 files.pythonhosted.org (files.pythonhosted.org)|151.101.77.63|:443... 已连接。
# 已发出 HTTP 请求,正在等待回应... 200 OK
# 长度:463657 (453K) [application/x-tar]
# 正在保存至: "supervisor-4.2.2.tar.gz"

Supervisor配置

'''
1、解压源码包
tar -zxvf supervisor-4.2.2.tar.gz
'''

# root@localhost software]# tar -zxvf supervisor-4.2.2.tar.gz
# supervisor-4.2.2/
# supervisor-4.2.2/CHANGES.rst
# supervisor-4.2.2/COPYRIGHT.txt

'''
2、安装python支持
yum install python-setuptools
'''

# [root@localhost supervisor-4.2.2]# yum install python-setuptools
# 已加载插件:fastestmirror
# Loading mirror speeds from cached hostfile

'''
3、编译源码包
python setup.py install
'''

# [root@localhost supervisor-4.2.2]# python setup.py install
# running install
# running bdist_egg
# running egg_info
# writing requirements to supervisor.egg-info/requires.txt

'''
4、编译后删除其他多余文件、除了build、dist两个文件夹其他都是多余的
'''

# [root@localhost supervisor-4.2.2]# ll
# 总用量 0
# drwxr-xr-x. 4 root root 43 9月  24 15:51 build
# drwxr-xr-x. 2 root root 40 9月  24 15:51 dist

'''
5、创建配置文件、编辑配置文件、赋予文件权限
'''

# echo_supervisord_conf > /usr/etc/supervisord.conf

# [root@localhost supervisor-4.2.2]# vi  /usr/etc/supervisord.conf

# chmod 777 /usr/etc/supervisord.conf

# [root@localhost supervisor-4.2.2]# mkdir config

# /usr/etc/supervisord.conf文件主要配置两个关键项

# [supervisord]
# user=普通用户名称            ; setuid to this UNIX account at startup; recommended if root

# [include]
# files = /software/supervisor-4.2.2/config   # 这个是以后的项目路径

'''
6、查看版本
'''

# [root@localhost supervisor-4.2.2]# supervisord -v
# 4.2.2

'''
7、解决python2.7.sock报错的问题
'''

# [root@localhost supervisor-4.2.2]# /usr/bin/python2 /usr/bin/supervisord -c /usr/etc/supervisord.conf

'''
8、更新配置
'''

# supervisorctl update

'''
9、配置一个程序项目配置
注意:这里使用hello_world只是作为一个说明,一般项目指的都是一直运行的进程服务,比如:redis、tomcat、nginx等等。
'''
# [root@localhost config]# vi hello_world.config

# [program:hello_world]
# command=/usr/bin/python2 /software/supervisor-4.2.2/hello_world.py
# priority=998
# autostart=true
# autorestart=true
# startsecs=60
# startretries=3
# stopsignal=TERM
# stopwaitsecs=10
# user=root
# stdout_logfile=/software/supervisor-4.2.2/logs/hello_world.log
# stdout_logfile_maxbytes=100MB
# stdout_logfile_backups=10
# stdout_capture_maxbytes=1MB
# stderr_logfile=/software/supervisor-4.2.2/logs/hello_world.log
# stderr_logfile_maxbytes=100MB
# stderr_logfile_backups=10
# stderr_capture_maxbytes=1MB

'''
10、创建hello_world项目
注意:这里使用hello_world只是作为一个说明,一般项目指的都是一直运行的进程服务,比如:redis、tomcat、nginx等等。
'''

# [root@localhost supervisor-4.2.2]# vi hello_world.py

# # -*- coding:utf-8 -*-
# print "我是hello_world程序"

'''
11、重启配置的所有程序
'''

# [root@localhost supervisor-4.2.2]# supervisorctl reload
# Restarted supervisord

'''
12、启动或停止某个项目
注意:这里使用hello_world只是作为一个说明,一般项目指的都是一直运行的进程服务,比如:redis、tomcat、nginx等等。
'''

# supervisorctl start 项目名称
# supervisorctl start hello_world

# supervisorctl stop 项目名称

# supervisorctl stop hello_world

【往期精选】

● 如何将一个python应用以docker镜像的方式来运行?

● python-celery专注于实现分布式异步任务处理、任务调度的插件!

● python远程服务操作工具:fabric,远程命令、本地命令、服务器操作利器!

● python超赞插件you-get,执行一行命令即可下载、命令行下载工具推荐!

● 办公自动化:Python-win32com自动将word文档转换成pdf格式!

● pandas数据统计插件的连接函数concat()妙用,灵活处理数据对象!

● Git LFS 3.0.0 发布,对大文件进行版本控制的 Git 扩展

● python有序序列的字典序列推导式运用技巧!

● Django 4.0 alpha 1 发布

● python经典有序序列的list列表推导式实践运用

● python常用转义字符串总结:各种字符转义的不同、如何取消转义字符效果?

● python内置函数通过字符串的方式来执行函数代码块,类似java的反射机制相当强大!

● 磨刀不误砍柴工,PyCharm开发工具的常规配置,充分提高开发效率!

● python-openpyxl Excel的单元格样式设置,包括字体、样式、宽高等等!

Original: https://www.cnblogs.com/lwsbc/p/15422068.html
Author: Python集中营
Title: 你不知道的CS模式的进程管理工具,状态监测、项目启停一目了然!



相关阅读

Title: 淘宝电商数据客户价值分析

1. RFM 客户价值模型介绍

​ RFM模型是衡量客户价值和客户创造利益能力的重要工具和手段。在众多的客户关系管理(CRM)的分析模式中,RFM模型是被广泛提到的。该机械模型通过一个客户的近期购买行为、购买的总体频率以及花了多少钱3项指标来描述该客户的价值状况。

最近一次消费(Recency):最近一次消费意指上一次购买的时候——顾客上一次是 几时来店里、上一次根据哪本邮购目录购买东西、 什么时候买的车,或在你的超市买早餐最近的一次是什么时候。

消费频率(Frequency):消费频率是顾客在限定的期间内所购买的 次数

消费金额(Monetary):消费 金额是所有数据库报告的支柱,也可以验证"帕雷托法则"(Pareto's Law)——公司80%的收入来自20%的顾客。

理论上M值和F值是一样的,都带有时间范围,指的是一段时间(通常是1年)内的消费金额,在工作中我认为对于一般店铺的类目而言,产品的价格带都是比较单一的,比如:同一品牌美妆类,价格浮动范围基本在某个特定消费群的可接受范围内,加上单一品类购买频次不高,所以对于一般店铺而言,M值对客户细分的作用相对较弱。

2. 利用RFM衡量客户的价值
2.1 取出相应列合并数据

在2018.xlsx和2019.xlsx两个数据表中获取'买家会员名', '买家实际支付金额', '订单付款时间'三列的数据合并后存入all.xlsx表格中。

import pandas as pd# 读取Excel文件df_2018 = pd.read_excel('./data/2018.xlsx')df_2019 = pd.read_excel('./data/2019.xlsx')print(df_2018.head())# 取出相应列df_2018 = df_2018[['买家会员名', '买家实际支付金额', '订单付款时间']]df_2019 = df_2019[['买家会员名', '买家实际支付金额', '订单付款时间']]# 合并df_all = pd.concat([df_2018, df_2019])# 读取data_all的尾部数据print(df_all.tail())df_all.to_excel('./data/all.xlsx')
2.2 计算all.xlsx 表格中的空值、最大值、最小值

计算 all.xlsx 表格中的空值、最大值、最小值后导出到 result.xlsx 表格中。

import pandas as pd"""返回缺失值个数以及最大最小值"""df = pd.read_excel('./data/all.xlsx')  # 读取Excel文件view = df.describe(percentiles=[], include='all').T  # 数据的基本描述 describe()详解:http://8e9.cn/6j1K1# view.to_excel('./data/result111.xlsx')  # 导出结果 可以查看describe有哪些数据view['null'] = len(df) - view['count']  # describe()函数自动计算非空值数,需要手动计算空值数view = view[['null', 'max', 'min']]view.columns = [u'空值数', u'最大值', u'最小值']  # 表头重命名view.to_excel('./data/result.xlsx')  # 导出结果

你不知道的CS模式的进程管理工具,状态监测、项目启停一目了然!

2.3 计算RFM值

计算RFM值:R最近消费间隔、F消费频率、M消费金额。

import pandas as pdimport numpy as np"""计算RFM值 R最近消费间隔  F消费频率  M消费金额"""# 读取Excel文件df = pd.read_excel('./data/all.xlsx')data = df[df['订单付款时间'].notnull() & df['买家实际支付金额'] != 0]  # 去除空值,订单付款时间非空值才保留 # 去除买家实际支付金额为0的记录data = data.copy()  # 复制数据# 订单付款时间和2019-12-31之差-->最近消费时间间隔 消费频率    最近消费间隔  消费金额data['最近消费间隔'] = (pd.to_datetime('2019-12-31') - pd.to_datetime(data['订单付款时间'])).values / np.timedelta64(1, "D")df11 = data[['订单付款时间', '买家会员名', '买家实际支付金额', '最近消费间隔']]# 分组计算agg({'键1':'函数1','键2':'函数2'})# size属于count_values(计数函数)# 根据 买家会员名 分组,买家会员名出现的次数size-->消费评率# 因为买家可能多次购买因此会有多条消费时间间隔,取最小的那条# 计算多次消费的总金额-->买家实际支付金额df1 = df11.groupby('买家会员名').agg({'买家会员名': 'size', '最近消费间隔': 'min', "买家实际支付金额": 'sum'})df2 = df1.rename(columns={'买家会员名': '消费频率', '买家实际支付金额': '消费总金额'})  # 列重命名rename({'旧列名1':'新列名1',"旧列名2":"新列名2"})df2.to_excel('./data/RFM.xlsx')

你不知道的CS模式的进程管理工具,状态监测、项目启停一目了然!

2.4 数据转换

进行数据转换,为 k-means 聚类模型做准备。

import pandas as pd"""进行数据转换,为k-means聚类模型做准备"""data = pd.read_excel('./data/RFM.xlsx')  # 读取Excel文件data = data[['最近消费间隔', '消费频率', '消费总金额']]  # 提取指定列数据data = (data - data.mean(axis=0)) / (data.std(axis=0))  # 标准化处理data.columns = ['R', 'F', 'M']  # 表头重命名print(data.head())  # 输出部分数据data.to_excel('./data/transformdata.xlsx', index=False)  # 导出数据

你不知道的CS模式的进程管理工具,状态监测、项目启停一目了然!

2.5 K_means聚类
k-means 聚类算法流程:① 指定需要划分的簇的个数k值(类的个数)② 随机地选择k个数据对象作为初始的聚类中心(不一定要是我们的样本点)③ 计算其余的各个数据对象到这个k个初始聚类中心的距离,把数据对象划归到距离它最近的那个中心所处的簇类中;④ 调整新类并且重新计算出新类的中心。⑤ 循环步骤③和④,看中心是否收敛(不变),如果收敛或达到迭代次数则停止循环;⑥ 结束
import pandas as pdfrom sklearn.cluster import KMeansimport matplotlib.pyplot as pltpd.set_option('display.unicode.east_asian_width', True)  # 解决数据输出时列名不对齐的问题data = pd.read_excel('./data/transformdata.xlsx')  # 读取数据cdata = pd.read_excel('./data/RFM.xlsx')  # 读取数据cdata = cdata[['买家会员名', '最近消费间隔', '消费频率', '消费总金额']]  # 提取指定列数据# print("cdata.index", cdata.index)k = 4Kmodel = KMeans(n_clusters=k)Kmodel.fit(data)clientdata = pd.concat([cdata, pd.Series(Kmodel.labels_, index=cdata.index)], axis=1)clientdata.columns = list(cdata.columns) + [u'类别']  # 重命名最后一列为"类别"clientdata.to_excel('./data/client.xlsx')print(clientdata.head())data_mean = clientdata.groupby('类别').mean()  # 按照类别分组统计R, F, M的指标均值print(data_mean)data_mean.to_excel('./data/client_mean.xlsx')new = data_mean.mean()df = data_mean.append(new, ignore_index=True)  # 增加一行RFM平均值(忽略索引),判断RFM值的高低print(df)r1 = pd.Series(Kmodel.labels_).value_counts()  # 统计每个类别都有多少个print(r1)r2 = pd.DataFrame(Kmodel.cluster_centers_)  # 聚类中心点r = pd.concat([r2, r1], axis=1)print(r)r.columns = list(data.columns) + [u'聚类数量']r3 = pd.Series(Kmodel.labels_, index=data.index)  # 类别标记r = pd.concat([data, r3], axis=1)  # 数据合并r.columns = list(data.columns) + [u'聚类类别']print(r)r.to_excel('./data/type.xlsx')  # 导出数据plt.rcParams['font.sans-serif'] = ['SimHei']  # 解决中文乱码plt.rcParams['axes.unicode_minus'] = False  # 解决负号不显示# 密度图for i in range(k):    cls = data[r[u'聚类类别'] == i]    cls.plot(kind='kde', linewidth=2, subplots=True, sharex=False)    plt.suptitle('客户群=%d;聚类数量=%d' % (i, r1[i]))plt.show()
2.6 四种聚类人群可视化展示

你不知道的CS模式的进程管理工具,状态监测、项目启停一目了然!

客户3 :重要保持客户(F,M高,R略高平均分。高价值客户,需作为VIP客户一对一营销,尽可能延长他们的高消费)

你不知道的CS模式的进程管理工具,状态监测、项目启停一目了然!

客户2:一般保持客户(F高,消费次数多,是比较忠实的客户,针对这种客户需要多传递促销活动,品牌消息,新品,活动消息)

你不知道的CS模式的进程管理工具,状态监测、项目启停一目了然!

客户1:一般发展客户(R,F,M都比较低,短时间内在店铺消费过,但是消费次数与消费金额都比较少,是店铺需要发展的潜在客户,应该该用户人群实 施密集的营销信息推送)

你不知道的CS模式的进程管理工具,状态监测、项目启停一目了然!

客户0:潜在客户(R高,F,M低,说明该客户很长时间都没用在店铺进行交易,并且消费金额与消费次数都很少。这类客户可能只有店铺打折的时候才会出来消费,想办法推动他们的消费心理,否则有流失的风险)

Original: https://blog.51cto.com/lanxf/5616789
Author: lanxiaofang
Title: 淘宝电商数据客户价值分析