为什么子进程紊乱了?

本文描述了一个Python程序中使用`multiprocessing`模块创建多进程时遇到的问题,即由于两个循环共享变量导致的程序紊乱。作者探讨了问题的原因,提出变量名冲突是关键,并提示避免在多进程环境下直接共享变量以确保顺序输出。
摘要由CSDN通过智能技术生成
下面的程序,原意是要先建立一个多进程,打印出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循环,运行结果依然出现类似上面的紊乱结果。所以,想输出顺序的数字序列的话,一定不能用多进程。

  • 25
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值