我是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个并发线程,其中每个线程计算一个数字的sq。
我已经尝试过以下代码来执行此操作,但我不确定它是否已发出n个并发线程(其中n = len(数字))。基本思路是同时发出n个不同的线程,其中每个线程计算数字数组中一个元素的平方,第一个线程应该计算数字数组中第一个元素的sq,同样第五个线程应该计算数字中第五个元素的sq数组等等。
最简单的想法是添加n个threading.Thread语句并发布线程,但还有其他方法可以使它更简单。
最好的问候。
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()
答案 0 :(得分:1)
您可以利用线程池。
import multiprocessing as mp
from multiprocessing.dummy import Pool as ThreadPool
def sq(num):
return num * num
with ThreadPool(mp.cpu_count()) as pool:
results = pool.map(sq, [10,20,30,40,50,60])
print(results)
multiprocessing.dummy
复制用于多线程的API。上面的代码生成了一系列等于您的CPU核心数的线程,然后在数组中的每个元素上调用sq
。
Documentation for multiprocessing.dummy
编辑。我只是注意到了这个问题的年龄,但是我会继续回答。
答案 1 :(得分:0)
你应该能够。但是您的示例将在每次迭代中覆盖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()