python多进程的问题

多进程在osx和linux下输出不同
代码:

import multiprocessing
def func(i):
    print multiprocessing.current_process().name + '-' + i
if __name__ == "__main__":
    pool = multiprocessing.Pool(processes=10) # 创建4个进程
    for i in xrange(10):
        **pool.apply_async(func, (i, ))**
    pool.close() # 关闭进程池,表示不能在往进程池中添加进程
    pool.join() # 等待进程池中的所有进程执行完毕,必须在close()之后调用
    print "Sub-process(es) done."

问题:
1:同样的程序在osx和linux下的输出为什么不一样?多进程从0到9,输出的i值应该是混乱的
对于osx 输出的i值是0-9有序,每次运行i值排序结果都一样,对于linux是乱序的,每次运行i值排序结果不一样,这是为什么呢?是因为osx和linux的系统的不同吗?

阅读 3.1k
2 个回答

这取决于你的CPU核数,你的osx应该只有2核,你多运行几次就会发现不是次次一样

不要对输出顺序有任何假设。
具体输出成什么样,这个不要在意,就是每次都是顺序的,那也是“乱序”的一种不是。所以,对某些系统为什么和别的系统不太一致不予置评。

使用多进程多线程,只要记住 除非明确,否则不要对运行顺序有任何假设 就可以了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题