芹菜如何处理自定义任务中的类属性

时间:2019-02-26 13:29:02

标签: python multiprocessing celery-task

我有一个看起来像这样的任务:

38 class Asins(Task, Application):
39 
40     APPNAME = '$$$$$'
41     VERSION = '1.4'
45
48 
49     ignore_result = True
50 
51     def __init__(self):
52 
53         super(Asins, self).__init__("root", send_email=False)
73         self.new_creation = True
           self.asin = Asin()
           self.test = False

82     def main(self, asin_code, asin_id, asin_country):
83         p = current_process()
84         if (p.index % 2) == 0:
85             self.test = False
86 
87         print(asin_id)
88         print(self.test)
89         print(self.asin.__dict__)
90         return asin_id

我已经为芹菜工人创建了上述自定义任务。 我进行了一些测试,有些东西我听不懂。

变量 self.test 似乎没有被不同的进程共享,因为只有偶数索引变为False而赔率仍为True的进程。

但是,对于所有进程,Asin()对象在内存中都具有相同的地址:

  

[2019-02-26 13:14:03,379:警告/ ForkPoolWorker-12]   {'_sa_instance_state':sqlalchemy.orm.state.InstanceState对象位于   0x7ff ****}

     

[2019-02-26 13:14:03,379:警告/ ForkPoolWorker-13]   {'_sa_instance_state':sqlalchemy.orm.state.InstanceState对象位于   0x7ff ****}

我的最后一个问题是: init 中的变量实例是在进程之间共享的还是独立的?它们在内存中看起来好像是独立的,怎么会有相同的地址?

0 个答案:

没有答案