使用 nameko 运行 服务时如何停止初始 class
how to stop initial class when use nameko run a service
您好,这是我的项目示例,我想使用 nameko run Test:A
,
而且我发现 class 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)```
你可以试试:
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 变量而不是实例变量。
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')
Nameko 服务作为 classes 实现,但在面向对象编程方面它们的行为与正常 classes 不同。
特别是,class 是为每个 worker 实例化的,即每次触发入口点时。这就是为什么你一遍又一遍地看到 "this class has been init"。
一般来说,您不应在 Nameko 服务中使用构造函数 class。
要管理服务的连接和一次性设置,您应该使用 DependencyProvider。
您好,这是我的项目示例,我想使用 nameko run Test:A
,
而且我发现 class 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)```
你可以试试:
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 变量而不是实例变量。
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')
Nameko 服务作为 classes 实现,但在面向对象编程方面它们的行为与正常 classes 不同。
特别是,class 是为每个 worker 实例化的,即每次触发入口点时。这就是为什么你一遍又一遍地看到 "this class has been init"。
一般来说,您不应在 Nameko 服务中使用构造函数 class。
要管理服务的连接和一次性设置,您应该使用 DependencyProvider。