Как обновить разделяемую переменную в отдельном процессе в многопроцессорной среде?
Я пытаюсь реализовать параллелизм с использованием Python.
Я использую VS 2017 с Python версии 3.7.
Мой код, как показано ниже:
def do_parallelization(self, link_list):
cpus = multi.cpu_count()
workers = []
page_bins = self.__get_chunks(cpus, link_list)
array_s = Array(c_wchar_p,3)
for cpu in range(cpus):
#sys.stdout.write("CPU " + str(cpu) + "\n")
# Process that will send corresponding list of pages
# to the function perform_extractionpage_bins[cpu]
try:
worker = multi.Process(name=str(cpu), target= self.get_page_content_para, args=(page_bins[cpu], array_s))
worker.daemon = True
workers.append(worker)
except Exception as e:
print(e)
for worker in workers:
worker.start()
for worker in workers:
worker.join()
print (array_s[:])
def get_page_content_para(self, link_list, array_s):
array_s[:] = ["up", "down", "left"]
Здесь я пытаюсь обновить Array
но в конце вызова функции я печатаю массив, который дает мне вывод ниже:
["","",""]
Я искал в Интернете, но все говорят, что следует обновить переменную. Я что-то пропустил?
1 ответ
Я могу получить ожидаемый результат, когда я положу
worker.start()
worker.join()
под
worker = multi.Process(name=str(cpu), target= self.get_page_content_para, args=(page_bins[cpu], array_s))
но когда я говорю, что это действительно делает параллелизм?
как я понимаю, когда переписывают, как уже упоминалось, он выполняется один за другим, я имею в виду один запуск процесса, завершение его, а затем запускается второй процесс.
это параллелизм?
кто-нибудь может объяснить это?