gpt4 book ai didi

python - 多线程访问python字典

转载 作者:太空宇宙 更新时间:2023-11-03 16:50:57 25 4
gpt4 key购买 nike

我试图同时从 python 中的不同线程访问相同的全局字典。访问点的线程安全对我来说不是一个问题,因为所有访问都是读取并且不会修改字典。我更改了代码以从多个线程进行访问,但我注意到执行速度没有增加,在检查后似乎解释器实际上序列化了访问,从而使我的代码中的更改为空。

有没有一种简单的方法可以在Python中拥有像Java的concurrentHashMap这样的结构?有问题的代码部分如下:

    class csvThread (threading.Thread):
def __init__(self, threadID, bizName):
threading.Thread.__init__(self)
self.threadID = threadID
self.bizName = bizName
def run(self):
thread_function(self.bizName)



def thread_function(biz):
first = True
bizTempImgMap = {}
for imag in bizMap[biz]:
if not similar(bizTempImgMap, imgMap[imag]):
bizTempImgMap[imag] = imgMap[imag]
if first:
a = imgMap[imag]
sum = a
else:
c = np.column_stack((a, imgMap[imag]))
sum += imgMap[imag]
a = c.max(1) #max
first = False
else:
print ("-")
csvLock.acquire()
writer.writerow([biz]+a.astype(np.str_).tolist()+(np.true_divide(sum, len(bizTempImgMap.keys()))).tolist())
csvLock.release()


csvLock = threading.Lock()
...
imgMap = img_vector_load('test_photos.csv')
bizMap = img_busyness_load('csv/test_photo_to_biz_ids.csv')
...
for biz in bizMap.keys():
if len(threads)<100:
thread = csvThread(len(threads), biz)
threads.append(thread)
thread.start()
else:
print("\nWaiting for threads to finish\n")
for t in threads:
t.join()
print("\nThreads Finished\n")
threads = []

最佳答案

"i have noticed no increase in the speed of the execution"

在 python 中使用线程不会提高速度,因为它们都在同一个核心上工作。查看:GIL

请注意,Python 线程应该用于并发架构,而不是速度性能。

如果您想保留此实现,请使用 multiprocessing .

关于python - 多线程访问python字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35840545/

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