Как обчислить матрицу через потоки?
import threading
import numpy as np
mat1 = np.array([[1, 2 ,1], [2, 2, 2], [1, 1, 2]])
mat2 = np.array([[1, 2 ,1], [2, 2, 2], [1, 1, 2]])
mat3 = np.array([[2, 2 ,2], [1, 1, 1], [2, 1, 2]])
mat4 = np.array([[1, 2 ,3], [3, 1, 1], [2, 1, 2]])
def func(m1, m2):
print(f"{m1.dot(m2)} - [{threading.currentThread().name}]\n")
thr1 = threading.Thread(target=func(mat1, mat2), name="thr-1")
thr1.start()
thr2 = threading.Thread(target=func(mat3, mat4), name="thr-2")
thr2.start()
Программа выполняется в основном потоке, а не в созданных
Ответы (2 шт):
Автор решения: c1vgk
→ Ссылка
import threading
import numpy as np
mat1 = np.array([[1, 2 ,1], [2, 2, 2], [1, 1, 2]])
mat2 = np.array([[1, 2 ,1], [2, 2, 2], [1, 1, 2]])
mat3 = np.array([[2, 2 ,2], [1, 1, 1], [2, 1, 2]])
mat4 = np.array([[1, 2 ,3], [3, 1, 1], [2, 1, 2]])
def func(m1, m2):
print(f"{m1.dot(m2)} - [{threading.currentThread().name}]\n")
thr1 = threading.Thread(target=func, args=(mat1, mat2), name="поток 1")
thr1.start()
thr2 = threading.Thread(target=func, args=(mat3, mat4), name="поток 2")
thr2.start()
Автор решения: CrazyElf
→ Ссылка
thr1 = threading.Thread(target=func(mat1, mat2), ...
Так вы сразу выполняете вызов func с аргументами, ещё до запуска отдельного потока, а поскольку func ничего не возвращает, это получается тоже самое, что такой код:
func(mat1, mat2)
thr1 = threading.Thread(target=None, ...
Ну а как правильно запускать поток, вы уже и сами поняли. Хотя хорошо бы делать в конце потокам join, иначе есть шанс, что они не успеют выполнится до конца основного потока.
...
thr1.join()
thr2.join()

