目前在用python处理一个mongoDB的表
数据量大概三百万
因为需要循环处理 每处理完一条就update_one一条
但是有的数据很短时间就完成 有的数据需要处理很长时间
多线程的话就会出现大部分线程等待最后几个线程完成才能再次加载数据
很浪费时间 试过每次处理数据都判断线程池 数量不够线程使用就锁线程开始加载数据
但是测试少量线程没问题 线程一多在不确定时间内依旧会出现等待线程的问题
如果加载全部数据内存又不够
每处理一条数据就加载一条也不行 update_one 会失败。。。
求教有没有什么好用的方法防止线程浪费?
1.建议你把update数据,单独开一个进程处理,去消耗update队列;
2.python处理数据会受大锁控制,所以多线程没啥用,也可以多开几个数据处理进程,去消耗read队列,处理完了放到update队列里面;
3.数据读取可以用一个数据读取进程,放到队列里面,加入read队列;
4.总的来说就是用pub-sub模式,三个进程的通信可以利用消息传递系统,比较方便的方案有使用redis的pub,sub;