永发信息网

python多个线程锁可提高效率吗

答案:2  悬赏:30  手机版
解决时间 2021-11-07 15:55
python多个线程锁可提高效率吗
最佳答案
如果你的代码是CPU密集型,多个线程的代码很有可能是线性执行的。所以这种情况下多线程是鸡肋,效率可能还不如单线程因为有context switch但是:如果你的代码是IO密集型,多线程可以明显提高效率。例如制作爬虫(我就不明白为什么Python总和爬虫联系在一起…不过也只想起来这个例子…),绝大多数时间爬虫是在等待socket返回数据。这个时候C代码里是有release GIL的,最终结果是某个线程等待IO的时候其他线程可以继续执行。反过来讲:你就不应该用Python写CPU密集型的代码…效率摆在那里…如果确实需要在CPU密集型的代码里用concurrent,就去用multiprocessing库。这个库是基于multi process实现了类multi thread的API接口,并且用pickle部分地实现了变量共享。再加一条,如果你不知道你的代码到底算CPU密集型还是IO密集型,教你个方法:multiprocessing这个module有一个dummy的sub module,它是基于multithread实现了multiprocessing的API。假设你使用的是multiprocessing的Pool,是使用多进程实现了concurrencyfrom multiprocessing import Pool如果把这个代码改成下面这样,就变成多线程实现concurrencyfrom multiprocessing.dummy import Pool两种方式都跑一下,哪个速度快用哪个就行了。UPDATE:刚刚才发现concurrent.futures这个东西,包含ThreadPoolExecutor和ProcessPoolExecutor,可能比multiprocessing更简单
全部回答
首先,Python的多线程本身就是效率极低的,因为有GIL(Global Interpreter Lock:全局解释锁)机制的限制,其作用简单说就是:对于一个解释器,只能有一个线程在执行bytecode。
所以如果为了追求传统意义上多线程的效率,在Python界还是用多进程(multiprocessing)吧……
这里你用了多线程,且用了锁来控制公共资源,首先锁这个东西会导致死锁,不加锁反而没有死锁隐患,但会有同步问题。
另外,如果不同线程操作的是不同的文件,是不存在同步问题的,如果操作同一个文件,我建议采用Queue(队列)来处理。
总的来说,用单线程就好了,因为Python多线程本身就没什么效率,而且单线程也不用考虑同步问题了。非要追求效率的话,就用多进程吧,同样也要考虑进程锁。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
l()老师没有来,我们()要遵守纪律应用什么关联
关于“妇道”的诗句都有哪些?
如何购买
就是一张手的图片怎么把爱心P到手里面
太保圆通车驾管社会服务站地址在什么地方,想
13×102×27的简算怎么做
莽小夫大力夯肉怎么样
姐妹洗车行(太莫公路东)地址有知道的么?有点
请问这张表怎么填写?急急急急急急
灯泡不是爱迪生发明的么,为什么
求的签文,求解:若是逢桥先下马便是有路莫行
为什么近代自然科学起源于西欧,而不是中国
九百九十八又九分之八除以一又九分之一
离子发生器放电端,有的用碳刷,有的用金属针
煮好的南瓜一次没吃完,下次热下可以在吃吗
推荐资讯
老婆为什么总对自已的老公性冷淡
珠江源汽车城交通管理服务站地址有知道的么?
人类定居月球已有哪些可能性l
做了三四年网优了,找了关系调回了总部市场部
台风又称什么,急急急啊!
1比0.9多多少
中国海关大楼停车场(出入口)地址在什么地方,
丰县创新学校主任高培刚和班主任闵暧昧,乱收
如何开征信证明
高度白洒伏天还能喝不
林志颖版绝代双骄小鱼儿是多少集练成五绝神功
上证、深证、中小板、创业板有什么关系?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?