死死团
精华
|
战斗力 鹅
|
回帖 0
注册时间 2004-10-8
|
本帖最后由 子虚乌有 于 2022-12-4 23:19 编辑
挺简单一段代码。不过又是多线程,又是多进程
def updateResultDict(key, result,lockCaculator,caculateResult):
lock.acquire()
lockCaculator.acquire()
caculateResult[key] = (datetime.datetime.now(), list(map(lambda x: x[0], result)))
lockCaculator.release()
lock.release()
本身这个方法实际逻辑就一句话:把计算结果放到一个普通dict里。
但是result是有几十个线程,每个线程都会生产出一个result,根据key来更新。所以会有多线程访问这个caculateResult。然后要有线程锁lock
caculateResult又作为计算结果会被其它进程访问,又有进程锁lockCaculator
现在问题出在lock.acquire()上,很慢。要4秒。
整个程序只有这个地方用到这个线程锁,进程锁在另外一个读结果的客户端用到,实际上目前没有enable所以可以认为其它地方也没用到。
而caculateResult[key] = (datetime.datetime.now(), list(map(lambda x: x[0], result))) 只是个dict的upda特。用时几乎可以忽略。
所以这个4秒很奇怪
|
|