我希望这样做:
我在同一个模块中有2个函数(甚至是相同的文件):
def a():
while(True):
//do something
if global_var:
//do something else!
def b():
global_var = some_function_result
我被赋予了使用单例类作为全局存储的想法。
(我确实尝试使用具有相同结果的模块级全局)
class Singleton(type):
_instances = {}
def __call__(cls, *args, **kwargs):
if cls not in cls._instances:
cls._instances[cls] = super(Singleton, cls).__call__(*args, **kwargs)
return cls._instances[cls]
class MyClass(object):
__metaclass__ = Singleton
def __init__(self):
self.flag = 1
@shared_task
def add_var():
myclass = MyClass()
while(1):
myclass.flag += 1
print myclass.flag
@shared_task
def print_var():
myclass = MyClass()
while(1):
print myclass.flag
结果:
print_var保持打印1,add_var继续添加1,但不反映在print_var
编辑:
错过提及更早的重要信息: 我在芹菜上运行这些过程 - 现在我已经明白芹菜和django在不同的线程上运行。 但是当我在芹菜中运行时,我仍然没有看到效果。
答案 0 :(得分:4)
如果这就是你想要达到的目的,那你就不需要单身;一个(静态)类属性将完成这项工作:
class MyClass(object):
FLAG = 1
@shared_task
def add_var():
myclass = MyClass()
while(1):
myclass.FLAG += 1
print( myclass.FLAG )
@shared_task
def print_var():
myclass = MyClass()
while(1):
print( myclass.FLAG )