代码之家  ›  专栏  ›  技术社区  ›  zhuzf

为什么你一直循环输出“11111”?[已关闭]

  •  -4
  • zhuzf  · 技术社区  · 2 年前

    aaa.py:

    import subprocess
    
    print(11111)
    exp = 0
    subprocess.run(['python', 'bbb.py'])
    
    print(22222)
    print(exp)
    

    bbb.py

    import aaa
    
    print("hello world")
    print("bbb.py :", aaa.exp)
    aaa.exp += 1
    

    为什么它总是陷入循环?

    1 回复  |  直到 2 年前
        1
  •  1
  •   Abhinav Anand    2 年前

    您的实现在aaa.py和bbb.py之间创建了一个循环依赖关系,导致了一个无限循环。让我们一步一步地分解发生了什么:

    1. aaa.py is executed.
    2. import subprocess and print(11111) are executed.
    3. exp is set to 0. subprocess.run(['python', 'bbb.py']) runs bbb.py.
    
    Now, in bbb.py:
    4. import aaa tries to import aaa.py again.
    

    问题是:当bbb.py导入aaa时,它会再次执行aaa.py中的所有代码,包括subprocess.run(['python','bbb.py'])。这会创建一个循环,其中aaa.py生成一个调用bbb.py的子进程,而bbb.py则导入aaa.py,从而导致一个无限循环。

    如何解决此问题:

    由于这两个程序都在访问和更改exp的值,因此可以将exp保留在一个单独的模块中,并在aaa.py和bbb.py中导入该模块。

    exp.py

    exp = 0
    

    aaa.py

    import subprocess
    import exp
    
    print(11111)
    subprocess.run(['python', 'bbb.py'])
    print(22222)
    print(exp.exp)
    

    bbb.py

    import exp
    
    print("hello world")
    print("bbb.py :", exp.exp)
    exp.exp += 1
    

    输出

    11111
    hello world
    bbb.py : 0
    22222
    0