下面的程序,原意是要先建立一个多进程,打印出0-1999个数字,然后在主进程中再次用for循环打印出0-1999个数字,想观察出多进程与主进程运行相同的任务,时间上有多大的差异。 实际上,在运行到690时,已经出现了意想不到的情况。出现意外的情况仅列示下面三段,实际类似的情况还有很多。原因是什么?怎样进行改进? from multiprocessing import Pool from multiprocessing import process def work(num): print(num) if __name__ == '__main__': po = Pool() for i in range(2000): po.apply_async(work(i,)) po.close() po.join() for i in range(2000): print(i)
出现程序紊乱的原因可能是两个循环中都用了i。把第二个for循环中改为j或其他的变量。
经过试验,修改第二个变量为就业无济于事。
那么,错误发生在上面地方呢?为什么子进程调用出现紊乱呢?怎样改进?
紊乱的结果如下:
即便删除主程序中的for循环,仅仅运行多进程的for循环,运行结果依然出现类似上面的紊乱结果。所以,想输出顺序的数字序列的话,一定不能用多进程。