Найти - Пользователи
Полная версия: обработка нескольких файлов и запись
Начало » Python для новичков » обработка нескольких файлов и запись
1 2
Fang
Стоит задача обработать несколько bmp файлов и данные с них сохранить в txt.

Как понимаю выглядеть это должно примерно так:
import PIL
from PIL import Image
from Queue import Queue
from threading import Thread
queue = Queue()
#Sozdaem ochered kartinok & imen failov
name = ["1.bmp", "2.bmp", "3.bmp", "4.bmp", "5.bmp", "6.bmp", "7.bmp", "8.bmp", "9.bmp", "0.bmp"]
mozg = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"]
def perc(i, q):
while True:
bmp = q.get()
print "Testing"% (i, bmp)
image = Image.open(bmp)
image.getcolors()

for i in range(num_threads):
worker = Thread(target=perc, args=(i, queue))
worker.setDaemon(True)
worker.start()
for bmp in name:
queue.put(bmp)
queue.join()
Но это я делаю только для одной очереди - чтения. Как сделать вторую очередь записи? И как это будет выглядеть вместе?
Ed
Трудно сказать. Непонятно вообще что вы делаете. Зачем name и mozg, которые нигде не используются? Где функция pinger? Где зовется perc? В общем нужно более внятное объяснение.
Андрей Светлов
А зачем мультипоточность? Чтобы все помедленнее работало и более феерично глючило? 8-)
Если используете queue.join() - потрудитесь делать еще и queue.task_done()
Потоки-демоны - зло. Вполне можно обойтись нормальными, с .join в конце работы.
Fang
Ed, извините, это я нашел исходный код реализующий поточность и некорректно вклеил в свою задачу.Поправил.
Андрей Светлов, а можете на примере показать?
Ed
Теперь немного получше. Ну и что нужно сделать? Зачем еще одна очередь? Пишите прям в выходные файлы в том же потоке, где читаете.
Кстати, я бы посоветовал использовать multiprocessing.Pool http://docs.python.org/library/multiprocessing.html?highlight=pool#module-multiprocessing.pool вместо Treading. Если у вас больше одного core, то будет быстрее. Да и кода поменьше.
Андрей Светлов
Показать - что?
multiprocessing.Pool +1
Fang
Андрей Светлов & Ed, прошу прощения, я начинающий питонер, не совсем понимаю как писать в тот же поток. Можно пример кода?
Ed
Что, тоже студент, что ли?
Какие данные нужно сохранить-то? В текущем коде только getcolors зовется.
Fang
Ed, вот их и нужно сохранить по файлам с именами от 0 до 9
Ed
Ну так вот, можно в очередь затолкать просто цифры range(10). В функции со странным названием perc нужно взять цифру из очереди, сделать из нее имя файла путем добавления .bmp, достать из файла цвета с помощью PIL, записать их в файл с именем, совпадающим с цифрой, которую взяли из очереди. Вот и все. Если попользоваться multiprocessing.Pool, то кода будет совсем чуть-чуть.
Пробуйте, показывайте здесь результат, обсудим.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB