Как сельдерей обрабатывает атрибуты класса в пользовательских задачах - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть задача, которая выглядит следующим образом:

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

Я создал вышеупомянутое пользовательское задание для работника Celery.Я выполнил несколько тестов, но есть кое-что, чего я не могу понять.

Переменная self.test , похоже, не используется разными процессами, поскольку только процесс с четным индексом обратился кFalse, в то время как шансы 1 остались равными 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 общими дляпроцесс или они независимы?Почему у них в памяти один и тот же адрес, который кажется независимым?

...