python多线程操作redis,效率并没有提高

发布于 2022-09-11 18:25:42 字数 1077 浏览 12 评论 0

问题描述

单线程操作一个循环用了1.38分钟
clipboard.png

多线程操作3次用了4.13分钟,为什么没有加快效率,瓶颈在哪里?请大神指教。

clipboard.png

问题出现的环境背景及自己尝试过哪些方法

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)
def loop(new_barcode):

print new_barcode
# print '开始时间:' + time.ctime()
flag = len(r.sMember(new_barcode)) * 0.85
for gene in gene_list: # gene_list 是22万个set,每个set里面有60条数据
    j = len(r.sInter(new_barcode,gene)) # r.sInter() 获取交集
    if j>flag:
        print new_barcode,gene,str(j)+"个相同"
# print '结束时间:' + time.ctime()

def main():

print('starting at:', time.ctime())
threads = []
nloops = range(len(new_barcode_list))

for i in nloops:
    t = MyThread(loop, (new_barcode_list[i][0],), loop.__name__)
    threads.append(t)

for i in nloops:
    threads[i].start()

for i in nloops:
    threads[i].join()

print('all DONE at:', time.ctime())

你期待的结果是什么?实际看到的错误信息又是什么?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

鱼窥荷 2022-09-18 18:25:42

Python的线程基本没啥用, 一般计算密集型程序 提高效率 会使用进程, IO密集型程序一般上 协程, 类似 gevent 什么的

纸短情长 2022-09-18 18:25:42

线程没啥用吧

长亭外,古道边 2022-09-18 18:25:42

不了解redis,但从执行时间看,3次是1次的3倍时间,应该是收到cpython GIL限制,
GIL全局解釋器鎖,是電腦程式設計語言解釋器用於同步執行緒的一種機制,它使得任何時刻僅有一個執行緒在執行。即便在多核心處理器上,使用 GIL 的解釋器也只允許同一時間執行一個執行緒。
简单说就是在用1个处理器在跑,这导致python用多线程跑密集cpu运算的程序显得很鸡肋。

一般建议多线程跑高密集io,如果要善用可以用多进程。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文