многопоточность Python порождает n параллельных потоков - PullRequest
0 голосов
/ 18 мая 2018

Я новичок в потоке Python, я попробовал приведенный ниже код, чтобы понять потоки.

import threading

def sq(num):
    for n in num:
        print("calculating square")
        print('square={}'.format(n*n))

numbers=[10,20,30,40,50,60]

t1 = threading.Thread(target=sq, args=(numbers,))

t1.start()
t1.join()

Насколько я понял, вышеприведенный код выдает один поток для вычисления квадратов чисел.

Я хотел знать, возможно ли порождать n разных потоков для вычисления квадратов из n чисел?например, если у меня есть пять чисел в массиве чисел как [10,20,30,40,50].вместо выдачи одного отдельного потока возможно выпустить 5 параллельных потоков, где каждый поток вычисляет квадрат числа.

Я пробовал приведенный ниже код для этого, но я не уверен, что он выдал n одновременных потоков (где n = len (числа)).Основная идея состоит в том, чтобы выдавать n разных потоков одновременно, где каждый поток вычисляет квадрат одного элемента в массиве чисел, первый поток должен вычислять sq первого элемента в массиве чисел, аналогично пятый поток должен вычислять sq пятого элемента в числахмассив и т. д.

Самая простая идея состоит в том, чтобы добавить n потоков и выписать потоки, но есть ли другой способ сделать его проще.

С наилучшими пожеланиями.

import threading

def sq(num):
    print("calculating square")
    print('square={}'.format(num*num))

numbers=[10,20,30,40,50,60]

for i in range(0,len(numbers)):
    t1 = threading.Thread(target=sq, args=(numbers[i],))
    t1.start()
    t1.join()

1 Ответ

0 голосов
/ 18 мая 2018

Вы должны быть в состоянии.Но ваш пример будет перезаписывать t1 в каждой итерации.Также не join() поток, прежде чем запускать все из них.

Псевдо решение:

threads = []
for number in numbers:
    new_thread = threading.Thread(target=sq, args=(number,))
    threads.append(new_thread)
    new_thread.start()
for old_thread in threads:
    old_thread.join()
...