使用 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