Несколько процессов не создаются Python - PullRequest
0 голосов
/ 08 апреля 2020

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

def update_value(value):
    print('module name:\n', __name__)
    print('parent process:\n', os.getppid())
    print('process id:\n', os.getpid())
    value_read = server_connect_read(channel, value)
    if value_read.server_connect() is False:
        return False
    print("updating values")
    update = server_read.update_value(old_values.xlsx)
    if value_read.server_disconnet() is False:
        return False

Pool(3, initializer=print('starting', current_process().name )).map(update_value, (ValueList,))

В приведенном выше коде ValuList - это файл Excel, содержащий значения, которые необходимо обновить. Теперь, когда я бегу над кодом, я получаю ниже как вывод.

module name:
 __main__
parent process:
 8048            <-----
process id:
 15068           <-----
module name:
 __main__
parent process:

8048          <-----
process id:
 15068      <----

В этом процессе первый код считывает значение из локального файла, устанавливает sh соединение, считывает значение с сервера, обновляет локальный файл.

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

Мне нужна помощь в поиске ошибок в коде.

1 Ответ

0 голосов
/ 09 апреля 2020

После еще нескольких поисков по topi c я обнаружил, что процесс выполняет fork (), а затем execve () совершенно нового Python процесса. Это решило проблему, потому что состояние модуля начинается с нуля. В коде, как показано ниже.

if __name__ == '__main__':
    with get_context("spawn").Pool(2) as pool:
        pool.map(update_value, ValueList)

Надеюсь, это поможет

...