O
O
Olzhas Suleimen2015-05-04 17:23:18
Python
Olzhas Suleimen, 2015-05-04 17:23:18

Threads in 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

Answer the question

In order to leave comments, you need to log in

3 answer(s)
A
abukhvalov, 2015-05-05
@SuleimenLeo

For example.

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()

A
Alexander, 2015-05-05
@Avernial

You can try using multiprocessing.Pool.
Usage example:

from multiprocessing import Pool

def f(x):
    return x*x

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

Instead of f, pass your function to kmns, the second argument to the part of your image. The result will be a list of processed parts of the image.

L
leverun, 2015-05-05
@leverun

Look towards Producer-Consumer .
For example, producer-consumer-problem-in-python
You can also use any MQ, for example, distributed-messaging-using-rabbitmq-and-python

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question