2016-09-08 5 views
0

Привет У меня есть следующий код:Python выполнить subprocess.call внутри карты

import sys 
import multiprocessing as mp 


def create_parser(): 
    from argparse import ArgumentParser, FileType 
    ap = ArgumentParser() 
    ap.add_argument('infile', type=FileType('r'), 
     help="file with shell commands to execute") 
    ap.add_argument('-n', '--ncpu', type=int, default=0, 
     help="Number of CPUs to use (default: %(default)s: all CPUs)") 
    return ap 


def cpus_to_use(ncpu): 
    return ncpu if ncpu else mp.cpu_count() 


if __name__ == '__main__': 
    from subprocess import call 

    ap = create_parser() 
    args = ap.parse_args(sys.argv[1:]) 

    ncpu = cpus_to_use(args.ncpu) 

    if args.infile: 
     # Read commands from already open file and close 
     commands = [c for c in args.infile.read().split('\n') if c] 
     args.infile.close() 

     # Create a pool and map run_cmd to the shell commands 
     pool = mp.Pool(processes=ncpu) 
     pool.map(call, commands) 

Я в основном импортировать текстовый файл из командной строки, которая имеет для каждой строки конкретная команда для выполнения (что я m пытается распараллелить). Я использую Python 2.7.12, и вывод print (command) выглядит отлично.

Я подозреваю, что есть ошибка в последней строке синтаксиса строки, как я получаю: Файл «run_parallel.py», строка 47, в pool.map (вызов, команды) Файл «/ главная/ЭСТ /anaconda2/lib/python2.7/multiprocessing/pool.py ", строка 251, на карте return self.map_async (func, iterable, chunksize) .get() Файл«/home/ect/anaconda2/lib/python2 0,7/многопроцессорная/pool.py», строка 567, в прибудете повышают self._value

Спасибо

ответ

0
commands = [c.split() for c in args.infile.read().split('\n') if c] 

(это от http://sburns.org/2014/05/03/cortical-tractography-recipe.html, правильно? У меня была одна и та же проблема :) Кажется, это работает, разбивая каждую запись в командах на белых пробелах, чтобы пул мог правильно разобрать аргументы для каждого вызова функции.

+0

благодарит за ваш ответ! – Francesco

+0

это немного не по теме, но мне не удалось запустить трактат, как в «учебнике» на sburns ... почему-то probtrackx никуда не денется, поэтому, если вы найдете какие-либо другие ошибки в коде/скрипты на веб-сайте, пожалуйста, дайте мне знать, я сделаю то же самое! – mrburnst

Смежные вопросы