Сразу оговорюсь что с многопроцессорностью я работаю второй раз. У меня возникла такая проблема. Есть код, который необходимо запускать в разных процессах. Я понимаю, что я могу подняться на уровень выше и запускать инициализацию данного класса (создавать новый объект класса) и запускать его там. Но мне интересно можно ли запустить метод start в многопроцессорности в этом же классе. Я понимаю, что каждому процессу нужно будет своё место в памяти. Т.Е. каждый процесс обращается к своим ячейкам памяти и если у нас не будет сборки конструктора в каждом процессе, то ничего не заработает (поправьте если я не прав). Возможно ли сделать это так, чтобы оно работало? один из вариантов, который у меня был это вызывать конструктор заново при создании нового процесса типа:
process = list()
for thread in range(threads):
__init__(self, program)
process_object = Process(target=program.start, args=tuple())
process_object.start()
process.append(process_object)
for process in process:
process.join()
for process in process:
process.terminate()
)
Но что то мне напоминает, что это плохой тон и я даже не уверен, что так можно делать. Есть ещё способы? За любые советы буду благодарен. Код прилогаю.
class Prog(Concrete_Prog):
def __init__(self, queue, range_='', threads=1):
self.threads = threads
self.range = range_
self.factory = QueueFactory(DBS.DB_QUEUES, QUEUES.WORKER_QUEUE)
self.getter = Browser()
self.saver = MongoDBSaver(db_name=DBS.LIGHT,
collection_name=COLLECTIONS.SAVE)
self.program = Behavior(getter=self.getter,
range=self.range,
saver=self.saver,
factory_queue=self.factory,
threads=self.threads)
def start(self):
queue = self.factory.generate_queue()
if queue.is_empty():
self.generate_queue(queue, self.queue_generator)
self.program.start