假设:有个数据操作,处理100万条数据,每个数据的value+1。
如简单代码假设
for x in range(1,100):
x++
从数据库获取100条了,然后想多进程去执行x++?
还是说多进程去数据库获取数据?
谢谢了
假设:有个数据操作,处理100万条数据,每个数据的value+1。
如简单代码假设
for x in range(1,100):
x++
从数据库获取100条了,然后想多进程去执行x++?
还是说多进程去数据库获取数据?
谢谢了
先将原始数据存入队列(queue)中,作为生产者
后从队列中取数据,执行操作,作为消费者
这时,可以在消费者开多线程(当然你锁处理得好的话,生产者也可以做多线程)
while tmp_queue.empty() is not True:
x = tmp_queue.get()
x += 1
在队列中,如果一直存在元素线程会持续进行操作。
其实Python中实现多进程的最佳方式是使用multiprocessing
中的map
例子(Python 3):
# f.py
# 要对某个列表中每个元素都执行一次的function
def f(x):
return x + 1
# main.py
from multiprocessing import pool
from f import f
# 创建进程池
p = pool.Pool(4)
lst = range(100)
# 使用多进程对整个列表进行计算
print(p.map(f, lst))
你可以直接把数据读取和数据+1两个函数再写到一个操作中啊,然后用多进程去操作,就上楼上说的一样用进程池进行操作。根据你的cpu核数,设置进程池的大小。由于多进程间不进行内存共享、也不能直接通信,你先用多进程从数据库中把所有数据读出来,然后再用多进程进行val+1也行的
2 回答4.3k 阅读✓ 已解决
2 回答864 阅读✓ 已解决
1 回答4.1k 阅读✓ 已解决
3 回答866 阅读✓ 已解决
2 回答2.2k 阅读✓ 已解决
4 回答2.6k 阅读
3 回答908 阅读✓ 已解决
有一个问题: 如果是数据库里面的数据, 为什么不执行sql,这比什么多进程要高效的多吧?
如果非要你给出的二选一, 那么考虑一下: