Потоки в python 2.7?

def kmns(img, k):
    # Была функция которая обрабатывала(kmns) изображение,
    ...
    return res
def proc(img, k, n):
    # так как изображения были большие,
    # пришлось их делить на n равных частей, и передавать их функции обработки
    # был малый прирост скорости
    ...
    for i in range(n):
        ....
        img[x:x + dx, y:y + dy] = kmns(img[x:x + dx, y:y + dy], k)

    # начал изучать потоки, но появилась проблема
    # как получить обработанный кусок изображение
    for i in range(n):
        ....
        t = threading.Thread(target=kmns, args=(img[x:x + dx, y:y + dy], k)
        # или как связать эти две строки?
        img[x:x + dx, y:y + dy] = ... # t.result
  • Вопрос задан
  • 553 просмотра
Решения вопроса 1
@abukhvalov
Бездарность. Хуже Петросяна.
Напрмиер.

import threading, random, time, Queue
q = Queue.Queue()

def sum(a,b,q):
	q.put(a+b)

def doSum():
	while True:
		a = random.uniform(4,5)
		b = random.uniform(7,8)
		t = threading.Thread(target=sum, args=(a,b,q)).start()
		print q.get()

		time.sleep(5)

doSum()
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Avernial
@Avernial
Разрабатываю научное ПО на языке Python.
Можете попробовать использовать multiprocessing.Pool.
Пример использования:
from multiprocessing import Pool

def f(x):
    return x*x

if __name__ == '__main__':
    p = Pool(5)
    print(p.map(f, [1, 2, 3]))


Вместо f передаете вашу функцию kmns, вторым аргументом части вашего изображения. Результатом будет список из обработанных частей изображения.
Ответ написан
Комментировать
leverun
@leverun
Смотри в сторону Producer-Consumer.
Например, producer-consumer-problem-in-python
Также можно любой MQ использовать, например, distributed-messaging-using-rabbitmq-and-python
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы