Multithreading 线程化python中的只读numpy数组

Multithreading 线程化python中的只读numpy数组,multithreading,numpy,python-multithreading,Multithreading,Numpy,Python Multithreading,我有多个使用numpy数组的线程 import threading import numpy as np import time shared_array = np.ones((5, 5)) def run(shared_array, nb_iters): k = shared_array**2 for i in range(nb_iters): k+=2 def multi_thread(): jobs = [] for _ in range(

我有多个使用numpy数组的线程

import threading
import numpy as np
import time


shared_array = np.ones((5, 5))

def run(shared_array, nb_iters):
   k = shared_array**2
   for i in range(nb_iters):
      k+=2

def multi_thread(): 
    jobs = []
    for _ in range(5):
        thread = threading.Thread(target=run, args=(shared_array, 1000000))
        jobs.append(thread)

    for j in jobs:
        j.start()
    for j in jobs:
        j.join()

t0 = time.time()
multi_thread()
print(time.time() - t0)
#result: 6.502177000045776

t0 = time.time()
# we used 1000000 iterations for each thread => total nb of iterations = 5 * 1000000
run(shared_array, 1000000 * 5) 
print(time.time() - t0)
#result: 6.6372435092926025
问题是在添加numpy数组作为参数后,5个并行线程的执行时间等于一个顺序执行


所以我想知道如何使一个程序(类似于这个程序)并行,这是一个糟糕的例子。Python有一个内部锁(全局解释器锁,GIL),这意味着一次只能有一个线程执行Python代码。当你进入numpy时,它可以并行运行,但是因为你的数组太小,你几乎没有花时间在numpy上,所以你没有任何并行性可言。

Python线程不会并行运行,由于全局解释器锁,一次只能运行一个线程。既然线程不能执行相同的功能,那么线程模块的用途是什么?我如何使用多线程解决这个问题?既然只有一个线程在执行,为什么线程中会有Barrier和Lock类?既然线程不能执行相同的功能,那么线程模块的用途是什么?我如何使用多线程解决这个问题?既然只有一个线程在执行,为什么线程中有屏障和锁类?Python线程非常适合I/O绑定的工作负载,以及花费大量时间在C模块(如numpy、pandas和TensorFlow)中的工作负载,这些模块为您释放锁。线程对于CPU限制的纯Python工作负载是无用的。