Я ломаю голову над этим всю ночь ...
makeflags = ['--prefix=/usr','--libdir=/usr/lib']
rootdir='/tmp/project'
ps = set()
def configModule(m):
print m
return Popen(["./autogen.sh"] + makeflags, cwd=rootdir+"/"+m)
for module in ['mod1','mod2','mod3' ... 'mod10']:
ps.add(configModule(module))
os.wait()
Я ожидал, что он запустит 10 процессов и будет выполнять ./autogen.sh параллельно. Однако то, что я заметил, было то, что первые несколько configModule, казалось, выходили, как только были вызваны функции. Я вижу только оператор «print m», но не фактический вывод ./autogen.sh в «mod1». Тем не менее, примерно через mod4 код начал работать параллельно. Я вижу, что загрузка ЦП высока, а выходные данные генерируются в разных папках модулей.
Есть идеи, почему первые несколько модулей не дали результата ./autogen.sh?
P.S. Если я запускаю этот код в последовательном режиме (то есть, используя subprocess.call вместо Popen), он работает правильно.