Как обновить разделяемую переменную в отдельном процессе в многопроцессорной среде? - PullRequest
0 голосов
/ 16 октября 2018

Я пытаюсь реализовать параллелизм, используя 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 Ответ

0 голосов
/ 16 октября 2018

Я могу получить точный результат, когда ставлю

worker.start()
worker.join()

под

worker = multi.Process(name=str(cpu), target= self.get_page_content_para, args=(page_bins[cpu], array_s))

, но когда я говорю, как уже упоминалось, это действительно делает параллелизм?

какя понимаю, когда переписывается, как уже упоминалось, он выполняется один за другим, я имею в виду один процесс запускается, завершает его, а затем запускается второй процесс.

это параллелизм?

Может кто-нибудь объяснить это

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...