gpt4 book ai didi

Python处理大量线程?

转载 作者:行者123 更新时间:2023-11-28 22:57:04 25 4
gpt4 key购买 nike

# data is a list  

Threading_list=[]

class myfunction(threading.Thread):

def __init__(self,val):
.......
.......

def run(self):
.......
.......

for i in range(100000):

t=myfunction(data[i]) # need to execute this function on every datapoint
t.start()
Threading_list.append(t)

for t in Threading_list:
t.join()

这将创建大约 100000 个线程,但我最多可以创建 32 个线程?可以在此代码中进行哪些修改?

最佳答案

很少需要创建这么多Python线程。更重要的是,我几乎想不出这样做的原因。有合适的体系结构模式来解决创建并行执行的限制线程数量的代码的任务。其中之一是 reactor .

你想做什么?

请记住,由于 GIL , Python 线程不会为计算任务提供任何性能提升,即使在多处理器和多内核系统上也是如此(顺便说一句,可以有一个 100000 内核的系统吗?我怀疑。:))。提升的唯一机会是如果计算部分是在用 C/C++ 编写的模块中执行的,这些模块在不获取 GIL 的情况下完成工作。通常 Python 线程用于并行执行包含阻塞 I/O 操作的代码。

UPD:注意到 stackless-python 标签。 AFAIK,它支持微线程。但是,目前还不清楚您要做什么。

如果您只想处理 100000 个值(对每个值应用一个公式?),最好编写如下内容:

def myfunction(val):
....
return something_calculated_from_val

results = [myfunction(d) for d in data] # you may use "map(myfunction, data)" instead

它应该好得多,除非 myfunction() 执行一些阻塞 I/O。如果是这样,ThreadPoolExecutor 可能真的有帮助。

关于Python处理大量线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14670267/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com