Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中的os.sytem()提供无限循环_Python_Process_Operating System_Subprocess_Multiprocessing - Fatal编程技术网

Python中的os.sytem()提供无限循环

Python中的os.sytem()提供无限循环,python,process,operating-system,subprocess,multiprocessing,Python,Process,Operating System,Subprocess,Multiprocessing,我的主Python脚本导入2个其他脚本;Test1.py和Test2.py Test1.py执行多处理,Test2.py执行一个简单的os.system('ls')命令。当Test1.py完成并调用Test.py时,os.system(ls)会变得疯狂,并创建无限的新进程。有人知道为什么会这样吗 # Main import multiprocessing import Test1.py import Test2.py def doSomething(): # Function 1, f

我的主Python脚本导入2个其他脚本;Test1.py和Test2.py

Test1.py执行多处理,Test2.py执行一个简单的os.system('ls')命令。当Test1.py完成并调用Test.py时,os.system(ls)会变得疯狂,并创建无限的新进程。有人知道为什么会这样吗

# Main
import multiprocessing
import Test1.py
import Test2.py

def doSomething():
    # Function 1, file1...file10 contain [name, path]
    data = [file1, file2, file3, file4, file5, file6, file7, file8, file9, file10]
    if __name__ == '__main__':
        pool = multiprocessing.Pool(processes=min(len(data), 5))
        print pool.map(Test1.worker, data)

    # Function 2
    Test2.worker()
Test1.py;调用perl命令

def worker(data):
    command = 'perl '+data[1].split('data_')[0]+'methods_FastQC\\fastqc '+data[1]+'\\'+data[0]+'\\'+data[0]+' --outdir='+data[1]+'\\_IlluminaResults\\_fastqcAnalysis'
    process = subprocess.Popen(command, stdout=subprocess.PIPE)
    process.wait()
    process.stdout.read()
py应该执行一个简单的ls命令,而不是停止生成新命令

def worker():
    command = 'ls'
    os.system(command)
当查看脚本启动后的进程时,function1之后的进程似乎也没有正确关闭。通过Taskmanager,我仍然可以看到5个额外的pythonw.exe,它们似乎没有任何作用。只有当我关闭打开的外壳时,它们才会消失。这可能与为什么os.system(命令)在函数2中变得疯狂有关?有人有解决方案吗?因为脚本还没有完成,所以我无法关闭shell,因为它还必须执行function2

编辑:在试图找到解决方案时,function1开始时多次执行function(2)中的命令,然后执行perl命令。更奇怪的是。

似乎每次导入主模块时都会执行
doSomething()
,并且可以在工人初始化期间通过
多处理多次导入。您可以通过在
Test2.worker()
中打印进程pid:
print(os.getpid())
来检查它

如果在模块级使用
,则应使用。如代码所示,在函数内部执行此操作很容易出错

import multiprocessing

# ...

if __name__ == '__main__': # at global level
    multiprocessing.freeze_support()
    main() # it calls do_something() and everything else

请参见中的第一个注释。

上面的列表中有一些奇怪的地方。如何键入
importtest2.py
而不出错?import语句使用的是模块名,没有“.py”部分,而不是完整的文件名。您在Windows上吗?Mulitprocessing说,“确保新的Python解释器可以安全地导入主模块,而不会产生意外的副作用(比如启动新进程)。”这可能是问题的原因吗?您的main正在通过
map
启动新进程,不是吗?无关:不要使用
stdout=PIPE
,除非在进程运行时从它读取,否则
进程。wait()
将永远等待。尝试
子流程。检查输出()
os.path.join()
以使您的代码正常工作。我希望您只是将“ls”用作测试,而不是认真使用此方法获取目录列表。有更好的方法可以做到这一点。