【问题标题】:Multiple process is not getting created Python没有创建多个进程Python
【发布时间】:2020-04-08 04:02:57
【问题描述】:

我正在处理创建多个进程以并行运行代码以加快进程的任务。 下面是我的代码。

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      <----

在这个过程中,首先代码会从本地文件读取值,建立连接,从服务器读取值,更新到本地文件。

以上代码运行,我可以看到正在创建进程。但所有进程父 ID 和进程 ID 保持不变。 据我了解,每个进程都有自己的进程ID。

我需要帮助来确定代码中是否有任何错误。

【问题讨论】:

    标签: multiprocessing python-3.6 python-multiprocessing


    【解决方案1】:

    在对该主题进行更多搜索后,我发现该进程执行了一个 fork(),然后是一个全新 Python 进程的 execve()。这解决了问题,因为模块状态从头开始。 代码如下。

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

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-05
      • 2013-12-25
      • 1970-01-01
      • 2020-11-29
      • 2015-02-22
      • 2020-10-19
      • 1970-01-01
      • 2021-12-12
      相关资源
      最近更新 更多