首页 > Windows开发 > 详细

unix的多进程和windows多进程区别

时间:2020-11-11 20:13:19      阅读:35      评论:0      收藏:0      [点我收藏+]

UniX:

用fork(分支---原生的完全并行的), 子进程从地址空间直接获得数据及python的运行配置

windows:

用spawn(产生----催生的), 另外同时并列启动多个python解释器,会分别执行被多进程策略分配的任务,同时也都会导入主进程的实现模块到自己的上下文中

所以要想兼容windows:

  1. 将多进程的实现代码放在if name=="main":下包裹. 否则当主进程模块被导入子进程上下文中时 又会直接运行主进程的进程产生策略部分,导致在一个子进程的引导环境中同时执行了下一个子进程的开启,会报错)

  2. 确保其他 "自定义的函数" collate_fn, worker_init_fn or dataset代码要 放在main外面(全局变量) , 确保其他进程都能访问获得.(函数序列化后是指针索引,而不是二进制码)

from multiprocessing import Process
def foo():
    print("hello")


p= Process(target=foo)
p.start()
"""
RuntimeError: 
        An attempt has been made to start a new process before the
        current process has finished its bootstrapping phase.
"""

from multiprocessing import Process
def foo():
    print("hello")

if __name__ == "__main__":
    p= Process(target=foo)
    p.start()
# hello

unix的多进程和windows多进程区别

原文:https://www.cnblogs.com/Henry-ZHAO/p/13960121.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!