gpt4 book ai didi

python - 记住方法调用之间的状态

转载 作者:太空宇宙 更新时间:2023-11-03 18:54:42 26 4
gpt4 key购买 nike

我正在使用 python ladon 包和 SOAP 公开 Web 服务。我想记住两个方法调用之间的状态。下面是示例代码:

from ladon.ladonizer import ladonize
import logging

class Sum(object):
sum = 0
FORMAT = '%(name)s %(asctime)s %(levelname)s %(message)s'
logging.basicConfig(filename='/path/to/my/dir/Sum.log', level=logging.DEBUG, format=FORMAT)
logger = logging.getLogger('Sum')
logger.debug("Starting")

@ladonize(int,rtype=int)
def Add(self, num):
Sum.logger.debug("Adding " + str(num))
Sum.sum += num
Sum.logger.debug("sum is now " + str(Sum.sum))
return Sum.sum

想法是使用整数参数调用方法 Add,该整数参数应添加到类 sum 变量中。由于 sum 是类变量(与实例变量相反),因此只要服务器或应用程序不重新加载代码,就应该保留状态。以下是日志结果:

Sum 2013-07-09 15:12:34,303 DEBUG Starting
Sum 2013-07-09 15:12:34,311 DEBUG Adding 5
Sum 2013-07-09 15:12:34,311 DEBUG sum is now 5
Sum 2013-07-09 15:12:36,169 DEBUG Adding 5
Sum 2013-07-09 15:12:36,169 DEBUG sum is now 10
Sum 2013-07-09 15:12:39,404 DEBUG Adding 5
Sum 2013-07-09 15:12:39,405 DEBUG sum is now 15
Sum 2013-07-09 15:12:46,734 DEBUG Starting
Sum 2013-07-09 15:12:46,742 DEBUG Adding 5
Sum 2013-07-09 15:12:46,743 DEBUG sum is now 5

从日志中可以看出,它适用于连续三次调用 Add 方法,但在 15:12:46 应用程序重新创建了类 Sum 对象,并且 sum 重置为 0。问题是:类是由应用程序还是 wsgi 重新加载的?如何防止应用程序(或服务器)重新加载类?有没有什么办法可以记住 Ladon 框架的两个方法调用之间 var 的状态?我想避免使用数据库。

最佳答案

您的 Sum 对象不是持久的,并且 sum 变量(以及所有其他变量)将重置为其初始值。您可以使用 pikle 将总和值持久保存在文件系统中。 ,类似:

import pickle
@ladonize(int,rtype=int)
def Add(self, num):
Sum.logger.debug("Adding " + str(num))
try:
Sum.sum = pickle.load( open( "sum.p", "rb" ) )
except:
pass

Sum.sum += num
Sum.logger.debug("sum is now " + str(Sum.sum))
pickle.dump( Sum.sum, open( "sum.p", "wb" ) )
return Sum.sum

关于python - 记住方法调用之间的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17550289/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com