精华内容
下载资源
问答
  • 全面记录客户信息,包括客户基本信息、联系人信息、产品或服务购买记录、账款往来,交往记录等等,在一个界面里可以查看以上所有信息。并可以对客户信息共享或放入公海或申请或指派。 公海申请管理 可以对公海中的...
  • 前言:笔者最近一个项目,需要把python客户端代码(可以理解成绑定不同账号的爬虫吧)部署20+台windows机器上(以后还会追加新机器)。由于客户机多,而且常常优化、修bug、加功能,使得笔者为了更新代码而不胜其...

    前言:

    笔者最近在搞一个项目,需要把python客户端代码(可以理解成绑定不同账号的爬虫吧)部署在20+台windows机器上(以后还会追加新机器)。由于客户机多,而且常常优化、修bug、加功能,使得笔者为了更新代码而不胜其扰!小小的调整居然要一台台搞(windows只能远程连接,你懂的,可没办法linux那样同时给多个ssh连接发相同的命令)。于是,笔者测试并开发了一套“基于windows自动下拉git代码并重启程序模块”(笔者不知道该简称什么...大概就是自动更新代码吧)。

    思路:

    linux系统就不多说了,只需要git检测到更新后,kill -9 掉即可,可以根据参数识别,例如 python client_main.py 利用ps筛选出来干掉即可。

    windows没有这命令,但是可以根据执行文件名杀掉。例如杀掉名叫 python.exe 的所有进程。这是唯一方法,但是你会把系统下所有的python都干掉,包括基于python的调试工具。

    于是,我想到的方法是用最土的方法,“用标识位告知程序是否有更新,是否要介绍,是否要重启”。233333虽然又土又不帅气,却很实用。特别像我这种客户端必须等一个任务完成后才能终结的,非常合适。一个守护进程检测更新,一个文件标识状态,子进程自己检测标识状态去停止。简简单单的完成了自动化需求。

    代码:

    测试git仓库 : https://gitee.com/kid0/tx 【有需要测试,代码请上传到自己的git上方便测试。当然也可以在自己的git项目中直接引用auto.py下的函数】

    模块代码(我命名为auto.py)

    #-*-coding:utf-8-*-

    import os

    import time

    import codecs

    from configparser import ConfigParser

    from multiprocessing import Process

    local_path = os.path.join(os.getcwd(),'local.txt' )

    code_check_time = 10

    def set_code_check_time(t=10):

    """

    设置git检测频率,单位秒

    """

    global code_check_time

    code_check_time = t

    def auto_manager_main(fun,*args,**kwargs):

    """

    委托进程

    """

    print('主进程PID:',os.getpid())

    global code_check_time

    _code_check_time = code_check_time

    if 1:

    if not os.path.isfile(local_path):

    f = open(local_path,'w+')

    txt = """[local]

    need_stop = 0

    need_restart = 0"""

    f.write(txt)

    f.close()

    con = ConfigParser()

    con.read_file(codecs.open(local_path,'r+',"utf-8-sig"))

    con.set('local','need_stop','0')

    con.set('local','need_restart','0')

    con.write(open(local_path,'w+'))

    _f = True

    while True:

    con.read_file(codecs.open(local_path,'r+',"utf-8-sig"))

    if not con.get('local','need_stop') == '1':

    _res = os.popen('git pull').read()

    if 'Fast-forward' in _res:

    con.set('local','need_stop','1')

    else:

    con.set('local','need_stop','0')

    con.write(open(local_path,'w+'))

    if con.get('local','need_restart') == '1' or _f:

    _f = False

    p = Process(target=fun,args=args,kwargs=kwargs)

    p.start()

    con.set('local', 'need_restart','0')

    con.write(open(local_path,'w+'))

    time.sleep(10)

    def check_stop_flag():

    """

    检测是否应该停止,在被托管的进程里使用

    """

    con = ConfigParser()

    con.read_file(codecs.open(local_path,'r+','utf-8-sig'))

    if con.get('local','need_stop') == "1":

    print('code was updata,now stop running!!')

    con.set('local','need_stop',"0")

    con.set('local','need_restart',"1")

    con.write(open(local_path,"w+"))

    exit(0)

    测试main.py文件

    #-*-coding:utf-8-*-

    from auto import check_stop_flag,auto_manager_main,set_code_check_time

    import time

    def run(x=0,y=0):

    #开始子进程

    print('run!!!!')

    for i in range(x,500):

    #设置在这里检测是否要退出进程

    check_stop_flag()

    #....做不应该突然中断任务....

    time.sleep(1)

    print('i={} y={}'.format(i,y))

    #....做完了...

    def tx(y=1):#(稍后测试我把1改成10)

    #main函数【可变参数可以传这里,如果参数值改变,程序重启后会跟随改变】

    run(x=1,y=y)#(稍后测试我把1改成10)

    if __name__ == '__main__':

    #设置检测频率(似乎并不会生效,待验证优化)

    set_code_check_time(1)

    #把进程委托自动管理【固定参数可以这里传入,重启程序参数也不会跟随改变的】

    auto_manager_main(tx,y=1)#(稍后测试我把1改成10)

    我先运行main.py文件,顺利的执行后,我在git上把参数x和y的值由1改成10。结果如下。

    主进程PID: 6004

    run!!!!

    i=1 y=1

    i=2 y=1

    i=3 y=1

    i=4 y=1

    i=5 y=1

    i=6 y=1

    i=7 y=1

    i=8 y=1

    i=9 y=1

    i=10 y=1

    i=11 y=1

    remote: Enumerating objects: 5, done.

    remote: Counting objects: 100% (5/5), done.

    remote: Compressing objects: 100% (3/3), done.

    remote: Total 3 (delta 2), reused 0 (delta 0)

    i=12 y=1g objects: 33% (1/3)

    Unpacking objects: 100% (3/3), done.

    From gitee.com:kid0/tx

    3ca10d8..9f08a5d master -> origin/master

    i=13 y=1

    code was updata,now stop running!!

    run!!!!

    i=10 y=1

    i=11 y=1

    i=12 y=1

    i=13 y=1

    i=14 y=1

    在我git改了代码后,main正常的自己退出,并且重启了。参数也是用最新的去运行。

    实验完成!!!投入使用!

    注意:

    1、.gitignore文件必须加入忽略local.txt文件!!!否则会导致冲突,无法下拉代码!!!

    2、可能会被修改的参数绝对不能由auto_manager_main传!应当用另一个函数简单包起main函数,像我测试的那样。

    解疑:

    1、为什么用Process(进程)而不是threading(线程)?

    python虽然是解释性语言,但它需要把py编译成pyc文件去运行。进程启动时会重新编译,但线程不会。大家可以试试。虽然会更新代码并重启,但是运行结果不会改变。

    2、是否适用于所有python项目?

    适用于“一套代码放在多个客户机,并且经常更新git”的情况。对于server服务我并不推荐。因为server服务应该是累积一定的更新后再更新的线上。

    3、直接杀掉进程用脚本启动会不会更简单?

    条条大路通罗马。方法很多,看你喜欢。像我的项目,任务是从队列拿的。如果突然干掉了进程,任务就会丢失,而且我这每个任务都十分关键!条条任务都是钱!(我有双重保护,拿到任务会写到本地文件内,完成再删除,防一手机器宕机的可能)如果是普通爬虫之类的倒无所谓,丢失1-2条数据没关系的。

    4、git pull为什么不是检测“Already up to date”?

    一开始我也是这样的考虑的。但是,网络异常、冲突、sshkeygen失效等问题都会导致无限的重启程序。因此只能检测pull成功下拉的标识。

    ————————————————————————————————————————————————————————

    以上就是我开发的模块和理解。欢迎大家使用和改进。

    转载请注明出处。

    展开全文
  • 全面记录客户信息,包括客户基本信息、联系人信息、产品或服务购买记录、账款往来,交往记录等等,在一个界面里可以查看以上所有信息。并可以对客户信息共享或放入公海或申请或指派。 公海申请管理 可以对公海中的...
  • 全面记录客户信息,包括客户基本信息、联系人信息、产品或服务购买记录、账款往来,交往记录等等,在一个界面里可以查看以上所有信息。并可以对客户信息共享或放入公海或申请或指派。 公海申请管理 可以对公海中的...
  •  数值的字段自动统计,在模块的下方显示出来(后台选)。 9:智能搜索: 关键词一键搜索; 综合搜索、按时间、部门、用户搜索、字段(多条件选组合)。 10:智能分类: 按需分类(按子菜单分类,自由选择...
  • 飞机航班信息管理系统主要分为用户和系统管理员2类,因此也将该系 统分为2相应的大的功能模块。 用户可以通过服务项目选择查询相关航班情况,进行订票,退订等服务项目。系统会将数据库中相应信息反馈给顾客。 ...
  • Message-Driven Bean EJB实例源代码 2个目标文件 摘要:Java源码,初学实例,EJB实例 Message-Driven Bean EJB实例源代码,演示一个接收购物订单的消息驱动Bean,处理这个订单同时通过e-mail的形式 //给客户一个感谢...
  • Message-Driven Bean EJB实例源代码 2个目标文件 摘要:Java源码,初学实例,EJB实例 Message-Driven Bean EJB实例源代码,演示一个接收购物订单的消息驱动Bean,处理这个订单同时通过e-mail的形式 //给客户一个感谢...
  • 用java做银行管理系统

    2016-01-05 13:53:50
    银行管理系统分为三模块:登录模块、管理员(即银行操作员)模块和客户模块。 登录模块: 登录模块中,以用户名区别管理员和客户。 管理员用工号登录,密码也为工号。 客户用自己开户时的用户名登录(客户...
  • W3B企业cms 0.1.2.rar

    2019-08-30 11:16:31
    一个子系统就是一个企业网站,功能与主系统雷同,独立设计模板 … 一、特色功能: 立足于二次开发 w3b设计立足于二次开发,让您更易原有系统基础上自行二次开发而不影响后期跟随官方同步升级; 一键安装与...
  • W3B企业cms 0.1.2.zip

    2019-05-24 17:21:17
    一个子系统就是一个企业网站,功能与主系统雷同,独立设计模板 … 一、特色功能: 立足于二次开发 w3b设计立足于二次开发,让您更易原有系统基础上自行二次开发而不影响后期跟随官方同步升级; 一键...
  • (5) 生成订单模块 浏览者购物完毕,系统会引导其进行结账,选择好结账方式后,系统会自动生成并交给客户一个唯一的订单号。 (6) 订单查询模块 客户可以根据自己的订单号,通过专门的入口跟踪订单的处理情况。 ...
  • (5) 生成订单模块 浏览者购物完毕,系统会引导其进行结账,选择好结账方式后,系统会自动生成并交给客户一个唯一的订单号。(6) 订单查询模块 客户可以根据自己的订单号,通过专门的入口跟踪订单的处理情况。...
  • 客户信息管理:全面记录客户信息,包括客户基本信息、联系人信息、产品或服务购买记录、账款往来,交往记录等等,在一个界面里可以查看以 上所有信息。并可以对客户信息共享或放入公海或申请或指派。 公海申请...
  • 鹰双会员通 v5.5.4.zip

    2019-07-09 03:52:43
    8)该系统由业内资深技术团队历时数年研发而成,技术成熟,理念领先,无缝集成客户管理、收银管理、库存管理、财务管理、营销管理、企业网站、电子商城等功能模块,它不是一个系统,也不是几个系统,而是一套大型的...
  • jeesite后台框架

    2018-09-07 19:09:56
    支持件换肤,只需properties里修改下主题名称即可快速切换整个UI的风格,不仅仅是色调和样式,布局也改变。支持自定义扩展项目独有的主题样式风格。 优化用户功能操作,大众思维模式,功能清晰,更加贴切和...
  • B) 图形工具能够极好地概括描述一个系统的信息,比文字叙述能够更好地表达重 要的细节 C) 图形能够更加直观地描述目标系统,便于用户理解和交流,有利于开发者与用 户之间达成一致的需求 D) 图形比文字描述简单、...
  • 客户的跟踪是一个延续性的工作,这期间很多数据会不断地变化,比如阶段、可能性、状态等,只有及时地更新这些数据,系统才能正常的发挥作用,比如销售漏斗、销售预测等。 3需求与方案是客户联系中,记录下...
  • 二、文章管理:设置文章分类、文章列表显示模板、文章内容显示模板,每篇文章也独立设置显示模板,以定制个性化的页面,同样设置每文章详细页面的标题、关键字、描述信息以及文章的URL地址,例如您可以将 ...
  • 要求1:封装一个Account类 - 业务数据 写一个账户类(Account),属性并且完全封装(注意:要辨别每个属性的set/get方法是否需要公开):  id:账户号码 长整数(Long)  password:账户密码 字符串类型(String)  name:...
  • (2)用户角色的定义(先添加一个角色赋予角色下的功能并命名角色,当添加新用户时选角色,相同角色具有相同的功能。) (3)用户和角色的联系,不同用户相同角色下具有相同的功能。 注:2.1版的角色管理功能仅限于...
  • (2)用户角色的定义(先添加一个角色赋予角色下的功能并命名角色,当添加新用户时选角色,相同角色具有相同的功能。) (3)用户和角色的联系,不同用户相同角色下具有相同的功能。 注:2.1版的角色管理功能...
  • 网上下载了一个程序,运行时会不会删除我的文件,或将某些文件泄漏给黑客? 编写了一个Java Applet,如何让其能访问硬盘上的文件? 主要内容 本章介绍基于代码来源的程序的安全运行,可以基于运行时代码哪个URL、或...
  • 但只是它的一个小小服务模块。 1.“建站”(成品项目)市场是无限量的持续性发展(互联网基础服务),不管未来怎么改变任何需要互联网服务的企业和个人都需要。 2.平台无限量对接增加服务器,告别客户资源不够用,...
  • eucms-v5.9.1.rar

    2020-04-15 08:07:32
    后台功能使用上更是站在客户的使用角度,所有功能简单明了,摒弃一切繁琐无用的功能,常用的主要就三链接:文章添加,文章管理,栏目管理,完全没接触网站的客户也能很快上手,非常简单。 为了适应时代需要,相继...
  • 网上日记本

    2013-12-30 21:34:33
    整个系统中,从功能划分成浏览、增加、删除及修改密码,四个模块,用一个主菜单来承载这四个功能,即每个功能完成后返回的界面。 现在对用户进入系统作详细设计。 需求分析中已经产明本软件采用的是前台录入方式...
  • 可在微信中轻松转发房间邀请好友参与游戏。 平台也可以快速的制作成app系统(客户需自行解决苹果上架问题)。 运营准备 服务器台,配置要求双核,4G内存,国内**以上带宽,香港及国的话5M以上带宽。 域名,如...
  • java源码包---java 源码 大量 实例

    千次下载 热门讨论 2013-04-18 23:15:26
    同时一个mail note将被发送给消息发送者,发送一个e-mail通知给由recipient参数确定的e-mail账号,查询mail 服务器的会话……  还包括消息客户端程序,通过连接创建会话。创建发送者和映射消息。发送消息,同时对...
  • Message-Driven Bean EJB实例源代码 2个目标文件 摘要:Java源码,初学实例,EJB实例 Message-Driven Bean EJB实例源代码,演示一个接收购物订单的消息驱动Bean,处理这个订单同时通过e-mail的形式 //给客户一个感谢...
  • JAVA上百实例源码以及开源项目

    千次下载 热门讨论 2016-01-03 17:37:40
    同时一个mail note将被发送给消息发送者,发送一个e-mail通知给由recipient参数确定的e-mail账号,查询mail 服务器的会话……  还包括消息客户端程序,通过连接创建会话。创建发送者和映射消息。发送消息,同时对...

空空如也

空空如也

1 2 3 4
收藏数 64
精华内容 25
关键字:

一个账号可在客户模块