使用nameko运行服务时如何停止初始化类

2024-06-09 22:26:54 发布

您现在位置:Python中文网/ 问答频道 /正文

嗨,这是我的项目的一个例子,我想用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)```

Tags: testimportselftimeinitdefthismethod
2条回答

Nameko服务被实现为类,但它们的行为与面向对象编程中的普通类不同。你知道吗

特别是,该类为每个worker实例化,即每次触发入口点时。这就是为什么你一次又一次地看到“这个类已经初始化了”。你知道吗

一般来说,您不应该在Nameko服务类中使用构造函数。你知道吗

要管理服务的连接和一次性设置,应该使用DependencyProvider。你知道吗

你可以试试:

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')

相关问题 更多 >