我想做这件事:
我在同一个模块中有两个功能(甚至是同一个文件(:
def a():
while(True):
//do something
if global_var:
//do something else!
def b():
global_var = some_function_result
有人给了我使用singleton类作为全局存储的想法。
(我确实尝试使用模块级全局,结果相同(
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是在不同的线程上运行的。但当我把两者都放在芹菜里时,我仍然看不到效果。
如果这就是您想要实现的全部,则不需要singleton;一个(静态(类属性可以完成任务:
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 )