Python 多线程处理数据的问题

目前在用python处理一个mongoDB的表

数据量大概三百万

因为需要循环处理 每处理完一条就update_one一条

但是有的数据很短时间就完成 有的数据需要处理很长时间

多线程的话就会出现大部分线程等待最后几个线程完成才能再次加载数据

很浪费时间 试过每次处理数据都判断线程池 数量不够线程使用就锁线程开始加载数据

但是测试少量线程没问题 线程一多在不确定时间内依旧会出现等待线程的问题

如果加载全部数据内存又不够

每处理一条数据就加载一条也不行 update_one 会失败。。。

求教有没有什么好用的方法防止线程浪费?

阅读 5.2k
1 个回答

1.建议你把update数据,单独开一个进程处理,去消耗update队列;
2.python处理数据会受大锁控制,所以多线程没啥用,也可以多开几个数据处理进程,去消耗read队列,处理完了放到update队列里面;
3.数据读取可以用一个数据读取进程,放到队列里面,加入read队列;
4.总的来说就是用pub-sub模式,三个进程的通信可以利用消息传递系统,比较方便的方案有使用redis的pub,sub;

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题