python多进程操作数据库_python中多进程的使用初探

应用场景:本人需要对200万条网页的文字进行分词过滤并写入数据库中,之前做了一次,大概话费了80多个小时才跑完,机器配置是4核的,内存8G;

开完会领导让再改点东西重新跑一遍,然后说用多进程或者多线程跑,本人接触python不到两个月,以前也基本不怎么编程,所以这种优化什么的东西都不懂,只好求助同事。

同事告诉我直接看廖雪峰的教程就ok了,下面这个网址是廖雪峰的教程网址,多进程​www.liaoxuefeng.com

看了一下多进程的代码,还算好懂,自己先看了一下他写的单个进程的代码,比较容易懂,但是我需要开四个进程,把我的cpu都占满来跑,这样效率才最大。

接着我看了一下如何开多个进程的栗子,首先我自己写了个小栗子跑了一下:

frommultiprocessing importProcess

importos

frommultiprocessing importPool

defrun_proc(i):

a=i*3

print(a)

if__name__=='__main__':

p = Pool(4)

fori inrange(5):

p.apply_async(run_proc, args=(i,))

p.close()

p.join()

可以看到,非常简单的一个功能,就是Pool代表的是一个进程池,里面写几就代表你想跑几个进程,但是你的cpu是几核你就只能开几个进程,而且进程数最好是2的整数倍(同事告诉我的)。查看cpu核数的方法就是打开任务管理器,然后性能里面有几个小窗口就代表几核。

我的是四个,代表四核。

按照上面的例子就是我用四个核来计算run_proc这个函数,然后每个核计算的是一个i值对应的run_proc函数。

接下来到我的实际场景中,我是想从数据库中读取200万条数据并对所有数据进行一系列操作后再写如数据库,这里我采用四核全跑,每个核分配50万数据来进行,

start = datetime.datetime.now()

p = Pool(4) # 建立进程池

get_data_cmd=['SELECT * FROM 标讯样本_二百万 limit 0,500000',

'SELECT * FROM 标讯样本_二百万 limit 500000,500000',

'SELECT * FROM 标讯样本_二百万 limit 1000000,500000',

'SELECT * FROM 标讯样本_二百万 limit 1500000,500000'

]

forcmd inget_data_cmd: # 将每个命令传入不同的子进程执行相同的代码

p.apply_async(con_seg_word, args=(cmd,))

p.close()

p.join()

我这里方法比较笨,就是将四个不同的sql命令放在一个列表中,然后循环读取列表中的语句来分配给每个核要跑的函数,这样就ok了,时间大约比之前少了4倍吧。

apply_async这个就是你要将你的这四个sql命令给哪个函数,其中arg就是函数中所要计算的参数。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值