Python 类之间共享的增量ID
我正在用Python编写一个虚拟助手,我想将每个请求、响应和可能的错误存储在数据库中。 我将一个类用于请求,另一个类用于响应,另一个类用于错误。 我如何创建一个ID变量,该变量为各自的类实例共享,例如: 程序的首次运行程序的正常和正确运行:Python 类之间共享的增量ID,python,Python,我正在用Python编写一个虚拟助手,我想将每个请求、响应和可能的错误存储在数据库中。 我将一个类用于请求,另一个类用于响应,另一个类用于错误。 我如何创建一个ID变量,该变量为各自的类实例共享,例如: 程序的首次运行程序的正常和正确运行: request_id = 1 response_id = 1 第二次运行时发生错误并停止程序以继续响应类: request_id = 2 error_id = 2 第三次运行程序运行良好,响应类跳过了id 2- 这就是我想要的行为: request_id
request_id = 1
response_id = 1
第二次运行时发生错误并停止程序以继续响应类:
request_id = 2
error_id = 2
第三次运行程序运行良好,响应类跳过了id 2-
这就是我想要的行为:
request_id = 3
response_id = 3
请注意,在第三次运行中,该响应_id接收到id 3,且响应_id=2将永远不存在,因为在第二次运行中,进程以请求启动,并在错误中停止
ID变量必须总是唯一的,即使我的程序崩溃,我必须重新启动它。我知道我可以在程序运行时获取数据库中的最后一个id,但有一种方法可以在不破坏数据库的情况下获取它?既然您使用数据库存储请求和响应,为什么不使用数据库为您生成此id呢
这可以通过使用主键int auto increment创建表来实现。每个请求/响应都应该插入到数据库中,并且数据库将为插入的每个记录生成一个唯一的id。如果您不需要,一个可能的解决方案是使用DB而不是DB。您可以使用以下代码: Tracker.py Status.py Success.py 等等 Error.py run.py 当然,您需要使用不同的URI,但现在您应该有了一个好主意。如果需要,还可以使用Pyro指定静态URI名称 输出应为:
$ c:\Python27\python.exe run.py
updated
1
updated
2
updated
3
HTH但是可以使用三个不同的表格,对吗?我将使用一个用于请求,一个用于响应,另一个用于错误。是的。只需确保每个表都有一个自动递增的整数主键。谢谢您的回答,但是对于一个简单的ID实现来说,它太长了。嗨,没问题。我知道你不想使用db。谢谢
import Pyro4
class Status(object):
def __init__(self, id):
self._id = id
self._pyro = None
def connect(self, target):
self._pyro = Pyro4.Proxy(target)
def updateId(self):
if ( not self._pyro is None ):
self._pyro.setId(self._id)
print "updated"
else:
print "please connect"
def getId(self):
if ( not self._pyro is None ):
return self._pyro.getId()
else:
print "please connect"
from Status import *
class Success(Status):
def __init__(self):
super(Success,self).__init__(1)
from Status import *
class Wait(Status):
def __init__(self):
super(Wait,self).__init__(1)
from Status import *
class Error(Status):
def __init__(self):
super(Error,self).__init__(3)
from Success import *
from Wait import *
from Error import *
#just an example
s = Success()
w = Wait()
e = Error()
s.connect("PYRO:obj_c98931f8b95d486a9b52cf0edc61b9d6@localhost:51464")
s.updateId()
print s.getId()
w.connect("PYRO:obj_c98931f8b95d486a9b52cf0edc61b9d6@localhost:51464")
w.updateId()
print s.getId()
e.connect("PYRO:obj_c98931f8b95d486a9b52cf0edc61b9d6@localhost:51464")
e.updateId()
print s.getId()
$ c:\Python27\python.exe run.py
updated
1
updated
2
updated
3