首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在使用nameko运行服务时停止初始类

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

Stack Overflow用户
提问于 2019-10-29 03:58:50
回答 2查看 281关注 0票数 2

嗨,这里是我的项目的一个例子,我想使用nameko run Test:A,并且我发现在运行这个服务期间,类A将是重复的。实际上,我想连接到一个服务并做一些重复的事情,我不想每次都初始化连接。有什么好办法解决这个问题吗?

代码语言:javascript
复制
###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)```
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-29 08:57:05

Nameko服务是作为类实现的,但在面向对象编程方面,它们的行为并不像普通类。

特别是,为每个工作人员实例化类,即每次入口点触发时都实例化类。这就是为什么你一遍又一遍地看到“这门课一直在里面”的原因。

通常,您不应该在Nameko服务类中使用构造函数。

若要管理服务的连接和一次性设置,应使用DependencyProvider

票数 1
EN

Stack Overflow用户

发布于 2019-10-29 05:32:13

你可以试试:

代码语言:javascript
复制
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成为类变量而不是实例变量。

代码语言:javascript
复制
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')
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58601264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档