当前位置 : 主页 > 网络安全 > 测试自动化 >

锁定与性能的Python成本,(多线程是否有意义?)

来源:互联网 收集:自由互联 发布时间:2021-06-22
我正在开发一个项目,我的代码吞吐量非常重要,经过一些考虑,我选择使我的程序具有线程. 主线程和子线程都添加和删除两个共享字典. 考虑到python中的锁定性能,我是否一直在寻找关于
我正在开发一个项目,我的代码吞吐量非常重要,经过一些考虑,我选择使我的程序具有线程.

主线程和子线程都添加和删除两个共享字典.
考虑到python中的锁定性能,我是否一直在寻找关于某些输入的互联网,这是一个缓慢的操作,等等.

所以我得到的是因为python实际上实际上根本没有线程(考虑到GIL只能在一个核心上运行)如果我需要在我的应用程序中获得高性能我是否有任何东西可以通过使其成为线程而不是处理IO ?

编辑

实际的问题是(经过深刻的评论后)

多线程在python中是否有意义,因为有GIL?

首先,锁定任何语言都是性能瓶颈.尽可能减少锁定;例如,不要使用共享目录,而是创建一个树,让每个线程在该树的不同分支中工作.

由于您将进行大量I / O,因此您的性能问题将存在,并且线程不一定会改善问题.首先研究事件驱动的体系结构:

> stdlib asyncore module
> twisted
> eventlets
> greenlets

GIL不太可能是你的问题;例如,每当线程进入C代码时(几乎可以肯定在任何I / O调用期间),它都会被释放.如果它确实成为瓶颈,请转向多个流程.例如,在我管理的大型Intranet集群中,我们运行每2个线程的6个进程以充分利用所有CPU核心(其中2个进程承载非常轻的负载).

如果您觉得需要多个进程,请使用multiprocessing module或轻松启动服务器的多个实例(每个实例在不同的端口上侦听),并使用负载均衡器(如haproxy)将流量定向到每个服务器.

网友评论