我有一个python flask脚本在uwsgi+nginx部署配置下运行。 我的uwsgi.ini文件文件:
[uwsgi]
pythonpath=/usr/bin/python3
socket=/tmp/grace.sock
chmod-socket = 666
vacuum = true
uid = www-data
gid = www-data
plugin= python3
chdir= /home/grace/pyRep/beta_grace
module= app:app
enable-threads= true
master= true
processes= 3
#cheaper= 1
logto = /home/grace/pyRep/beta_grace/uwsgi.log
lazy-apps = true
single-interpreter=true
现在,在我的脚本中我有一个这样的函数:
^{pr2}$看看我的日志,我发现: 全局变量:1 全局变量:1 全局变量:1
在我看来,这是因为启用了lazy apps选项,所以fork之后我有三个任务副本在运行,过了一段时间后,我发现:
全局变量:34 全局变量:32 全局变量:32
我尝试在@timer decorator之前使用@lock和@postfork decorator,但没有任何变化。如果我去掉lazy apps选项,我在连接mongoDB引擎和其他奇怪的行为时会遇到问题,所以我认为我必须保留它。 我找到的唯一解决方案是将进程限制为1,但这会降低性能。 有什么建议吗?!在
我想我找到了一个侵入性更小的解决方案,使用一个单一的过程和一个骡子,所以现在我uwsg.ini文件公司名称:
我的python脚本:
^{pr2}$通过这种方式,我卸载了将计时器绑定到mule的主进程以及主进程上的其他任务。我想用2个过程+1个mule,但是
同样只有一个过程的速度是可以的!在
关键是不能在多个进程之间共享/使用简单变量(甚至全局变量)进行通信。在
可以找到IPC方法here
对于您的情况,我认为
redis
是一种解决方案,记住使用分布式锁相关问题 更多 >
编程相关推荐