您好,这是我的项目的示例,我想使用nameko run Test:A
,
而且我发现在运行此服务期间, A类将反复被初始化。
实际上,我想连接到服务并重复进行一些操作,并且我不想每次都初始化连接。那么有什么好的方法可以解决这个问题吗?
###FileName:Test.py###
from nameko.timer import timer
import time
class A:
name = 'test'
def __init__(self):
self.a = 'a'
print('this class has been init')
@timer(interval=0)
def test(self):
try:
print('this is a nameko method')
except:
pass
time.sleep(1)
@timer(interval=2)
def test2(self):
try:
print('second nameko method')
except:
pass
time.sleep(3)```
答案 0 :(得分:0)
Nameko服务被实现为类,但是就面向对象编程而言,它们的行为不像普通的类。
尤其是,该类为每个工作者实例化,即每次入口点被触发时。这就是为什么您会一遍又一遍地看到“此类已被初始化”的原因。
通常,您不应该在Nameko服务类中使用构造函数。
要管理服务的连接和一次性设置,您应该使用DependencyProvider。
答案 1 :(得分:-1)
您可以尝试:
class A:
name = 'test'
def __init__(self):
try:
self.a
except Exception as e:
print (e)
self.a = 'a'
print('this class has been init')
这将检查self.a
是否已经在范围内,如果是,它将不会将其分配给'a'
。否则,它将这样做。
如果这不是您想要的,还可以将a
设为类变量而不是实例变量。
class A:
name = 'test'
def __init__(self):
try:
A.a
print (A.a) #nothing
except Exception as e:
print (e)
A.a = 'a'
print (A.a) #created
print('this class has been init')