uwsgi多进程缓存问题解决办法探讨

1625 人浏览 | 时间: 2019-04-18 13:46:27 | 作者: codexia 会员文章,禁止转载

    在开发过程中发现过一种现象,当uwsgi开启了多进程之后,会出现一个数据更新后,然后反复刷新页面或接口结果会反复变化,而变化的内容则是更新之前和更新之后两种,甚至有多种。

    也就是说,一个进程操作之后,改变了数据,所以此进程返回的结果的数据更新了,而其他进程因为没有更新数据,所以返回的是旧数据。当重启了uwsgi后,所有返回结果就一致了。

    为什么呢?疑问点来了:
1.uwsgi开启的多进程和代码有关系吗?
2.一个进程更新了数据,其他进程为什么不更新呢?
3.为什么结果会反复变化呢?
4.为什么重启uwsgi后,所有进程的结果又一致了呢?


    下面我们依次来探讨这些问题。

1.uwsgi开启的多进程和代码有关系吗?

    单进程、多进程的工作模式是不一样的。虽然表面上看上去多进程无非是多了几个进程,实则多进程会多出来好多事。好比,一个人吃饭会有条不紊慢慢的吃,优雅而悠闲。如果是多个人吃呢?文明点就是表面和气,却以一个不容易觉察的方式来抢食。不文明的呢,则是直接明抢。当然,为了保持秩序,自然是有规则来规定行为。

    所以,代码就是我们的吃饭这个事情,而单进程和多进程就像是一个人和多个人的区别。人一多,事就多,得管。管就要有规则,那就要有必要的措施。一旦规则被破坏,或者规则有漏洞,还是要出现问题的。所以,多进程和代码是有关系的。

2.一个进程更新了数据,其他进程为什么不更新呢?

    在操作系统里,一个进程就是一间房。进程间是隔离的,每个进程有进程自己的东西,所以每一个进程一般是独立的。所以,一个进程更新了数据,不代表其他进程也要更新。具体的还要看进程内部是如何实现的。也就是说,虽然进程是独立的,但是看你的代码有没有做到独立性。

    我们这里说的进程更新了数据,有可能是公共地方的数据。一个进程操作了这个数据,所以这个数据变了,那么其他进程去读取,一般是要最新的数据的。如果发现其他进

开通会员>>阅读全文
标注
评论
站内搜
百度搜
传送到手机
手机扫码,识别文字,完成传送x
加载中...
标注内容x
加载中...
添加标注x
收藏 0 点赞 0