Потоковые подпроцессы в Python - PullRequest
3 голосов
/ 02 августа 2011

Если я использую библиотеку потоков Python, могу ли я выполнить пакет подпроцессов быстрее?Скажем, например, мне нужно конвертировать 100 файлов .wav в файлы .mp3.Если я оберну 'ffmpeg' в сценарии Python, который использует многопоточность, могу ли я выполнить задачу намного быстрее?Позволяет ли многопоточность фактически использовать все 8 потоков, доступных в моем i7?

Недавно я наткнулся на скрипт Python, который пингует список хостов, но использует потоки, чтобы ускорить процесс.Сценарий казался лаконичным и достаточно легким для начинающего, такого как я, чтобы читать и понимать.Вот где возникает другой мой вопрос: что за разговоры о том, что параллельные задачи так сложны?Возможно я не понимаю параллель и параллель! = Многопоточность.Если это так просто, то почему бы людям не использовать многопоточность для всех без исключения пакетных преобразований при работе на современном процессоре?

Ответы [ 3 ]

3 голосов
/ 08 июня 2014

Вот простое и рабочее решение для вашего случая. Я использую это часто, и это оказывается очень полезным! Этот код создает столько потоков, сколько ядер, и позволяет им выполнять (большое) количество задач (в данном случае, вызывая программу оболочки):

import Queue
import threading
import multiprocessing
import subprocess

q = Queue.Queue()
for i in range(30): #put 30 tasks in the queue
    q.put(i)

def worker():
    while True:
        item = q.get()
        #execute a task: call a shell program and wait until it completes
        subprocess.call("echo "+str(item), shell=True) 
        q.task_done()

cpus=multiprocessing.cpu_count() #detect number of cores
print("Creating %d threads" % cpus)
for i in range(cpus):
     t = threading.Thread(target=worker)
     t.daemon = True
     t.start()

q.join() #block until all tasks are done
2 голосов
/ 02 августа 2011

делает вашу программу многопоточной с многопоточностью , безусловно, сделает это быстрее, если использовать ее правильно, но вы не можете реально контролировать, сколько вашего процессора или сколько ядер будет использовать ваше приложение используйте, потому что все это обрабатывается ОС, модуль multiprocessing в python - это еще один подход, который вы могли бы использовать, но было бы лучше, если бы вы читали об этом предмете более подробно, прежде чем испытывать эти модули, я рекомендую это учебник .

0 голосов
/ 02 августа 2011

Вы должны использовать многопроцессорный модуль в Python, потому что вы можете использовать более одного ядра на вашем компьютере. Попробуйте этот многопроцессорный модуль в Python

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...