关于python 多线程

关于python 多线程往上搜索到两种写法:

from concurrent.futures import ThreadPoolExecutor
buffer_size= 1024  #缓冲区大小

my_list = [1,2,3,4,5]
def cal_data(para1):
    print(para1+para1)

# 方案1
executor = ThreadPoolExecutor(20)
for  item in my_list:
    executor.submit(cal_data,item )

# 方案2
for  item in my_list:
     with ThreadPoolExecutor(max_workers=20 ) as pool: # 线程池
            pool.map(cal_data, item)

不知道以上两种写法有什么差别,那个效率更快呢?

第二个问题,实际项目中cal_data函数中包含删除和写入mysql数据库操作,所以就算开100个线程,内存32G,感觉还是受限数据库读取效率,所以有什么办法在开多个进程的时候提高数据库操作效率呢?

方案一快些。方案二每次循环都创建了新的线程池对象,比较浪费资源。

看下这篇博客,也许你就懂了,链接:玩转python多线程
同时,你还可以查看手册:python- 多线程 中的内容

第一个问题:哪一种更快应该是根据你具体的应用场景进行测试,如果比较简单应该是可以不用考虑效率问题的
第二个问题:对于关系型数据库,例如Mysql在做并发的操作的时候提高效率的关键还是锁机制,例如Innodb引擎中利用行锁取代表锁提高并发效率,这种时候修改python代码不如从数据库的角度来优化操作的SQL语句,例如使用SELECT ... FOR UPDATE,SELECT ... FOR UPDATE SKIP LOCKED等来将业务组合下写成事务。
总结:建议优化对数据库操作。

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632