Запускать os.system() несколько раз одновременно в Python?

Я написал следующий короткий скрипт на Python для загрузки FLV-видео с помощью cclive в системе Fedora 17.

urls = [line.strip() for line in open("urls.txt")]
for url in urlstoget:
    os.system('cclive %s' % url)

Он работает нормально, но скорость видео ограничена примерно 80 кбит/с. У меня есть 39 для загрузки и я хотел бы загрузить 2-4 одновременно.

Как запустить команду os.system() несколько раз одновременно?


person James    schedule 24.08.2012    source источник


Ответы (2)


используйте threading или multiprocessing.

Вот пример использования многопроцессорности:

def retrieve_url(url):
    os.system('cclive %s' % url)

pool = multiprocessing.Pool(4)
pool.map(retrieve_url, list_of_urls)

И ссылка на другой вопрос SO: Python - параллельные команды

person mgilson    schedule 24.08.2012
comment
Спасибо, это работает отлично. Ну, все индикаторы выполнения вывода на экран наложены друг на друга в нижней части экрана из cclive, но он работает 4 раза. Спасибо. - person James; 24.08.2012

Посмотрите на модуль подпроцесса, в частности на метод Popen(). Вы также можете использовать os.fork()

person James Thiele    schedule 24.08.2012
comment
subprocess - отличное решение здесь (в некотором смысле лучше, чем мой ответ). Не знаю, почему я не подумал об этом... - person mgilson; 24.08.2012
comment
Спасибо, я посмотрел на подпроцесс, но я программирую всего пару месяцев, а docs.python как никогда загадочен. - person James; 24.08.2012
comment
@James - вы привыкнете к формату документов, если будете его придерживаться. На самом деле их довольно легко читать/использовать, как только вы освоитесь. - person mgilson; 24.08.2012