V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
jackOff
V2EX  ›  Python

Python 项目代码升级咋搞?

  •  
  •   jackOff · 36 天前 · 2394 次点击
    这是一个创建于 36 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现在的方案是 python 调用一个 c++进程把 python 杀死再拷贝新代码覆盖,但是遇到一次比较严重的 copy 语句错误,意思就是有 python 文件正在占用无法覆盖,这个问题遇到的概率不是很高,但是很恶心,会导致个别人的程序有部分代码不是最新的,一般来说,对于 python 项目升级有什么好办法能根除这种风险?

    8 条回复    2025-05-02 00:15:39 +08:00
    Syiize
        1
    Syiize  
       36 天前
    热更新?我记得可以通过 importlib 进行操作,实现从更新后的模块中加载新的代码。
    不过我能想到的最简单的方式应该是写一个 wrap ,通过 wrap 启动你要启动的项目,然后更新时项目进程退出,并通知 wrap 重启。
    guanzhangzhang
        2
    guanzhangzhang  
       36 天前
    文件是 inode ,mv 了后再 copy
    woodfizky
        3
    woodfizky  
       36 天前
    Python 项目如果要用手动杀进程的方式去终止运行,那这个东西能叫项目也有点勉强吧。。。
    是 web 项目还是什么东西?不考虑用 docker 去跑吗?
    以前我不用 docker 跑 python 项目的时候是用 supervisord 去管理 python 进程的。
    exiledkingcc
        4
    exiledkingcc  
       36 天前
    程序使用 systemd service 来运行。
    在 ExecStartPre 里面处理更新逻辑。
    更新时将需要更新的文件,放在一个特定的位置,然后退出。
    记得配置 Restart 与退出的 exit code ,保证更新时的退出码后能重启(区别于正常服务停止)。
    ExecStartPre 里面的脚本只需要检测更新是否存在,并替换。
    Vegetable
        5
    Vegetable  
       36 天前
    难道是 windows 吗?
    正常都是软链接或者直接覆盖,你这个问题说的不清不楚的,所谓热更新根本算不上需要解决的问题,成熟方案太多了,你得说清楚你在什么情况下遇到了什么问题。
    kivmi
        6
    kivmi  
       36 天前
    是否可以设置安全点,当代码运行到安全点,重启 python 进程?
    bingfengfeifei
        7
    bingfengfeifei  
       36 天前
    1. python 用 systemd 跑
    2. 升级的时候 python 创建一个守护进程去升级代码
    3. 不去覆盖代码,mv 备份版本,然后 mv 或者 cp 新版本代码过去
    4. 升级的守护进程重启 systemd 的 python 进程
    l4ever
        8
    l4ever  
       35 天前
    docker 解决不了你的问题?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5577 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 06:41 · PVG 14:41 · LAX 23:41 · JFK 02:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.