提高python执行效率_python 多进程如何提高函数效率?

问 题

1 如何利用multiprocessing 库提高单个函数的执行效率

2 代码如下:

def f():

urls = ['http://yanbao.stock.hexun.com/listnews1_{}.shtml'.format(i) for i in range(1,5)]

d = {}

l1 = []

l2 = []

for url in urls:

con = requests.get(url).text

soup = BeautifulSoup(con, 'lxml')

stockname = [i.string.split(':')[0] for i in soup.find_all('a',class_ = 'fxx_wb')] #得到每个研报的链接

t = [i.string for i in soup.find_all(text=re.compile('\d+-\d+-\d'))] # 得到研报发布时间

l1.extend(stockname)

l2.extend(t)

d['stockname'] = l1

d['time'] = l2

return d

if __name__ == '__main__':

a = time.time()

p = Pool(4)

# # l.extend(p.map(f,urls))

info1 = p.apply_async(f)

p.close()

p.join()

print(info1)

print(time.time()-a)

c = time.time()

info2 = f()

print(info2)

print(time.time()-c)

3 urls这个变量是自己构造的,把range参数改变可以有很多。自己的想法是利用多进程执行这个函数,通过函数的返回值赋值给一个变量比如info1和info2,然后将info这个变量写入文件。

问题:1 多进程的方法所用时间没有明显减少,甚至要多,可能使用的方法不正确 2 在使用多进程时,如何把函数的返回值赋值给另一个变量。 初学者,多指教

解决方案

你完全搞错了多进程的概念,你刚刚那样写,只启了一个进程

import requests

from bs4 import BeautifulSoup

from multiprocessing import Pool

import time

import re

def f(page):

url = 'http://yanbao.stock.hexun.com/listnews1_{}.shtml'.format(page)

d = {}

l1 = []

l2 = []

con = requests.get(url).text

soup = BeautifulSoup(con, 'lxml')

stockname = [i.string.split(':')[0] for i in soup.find_all('a', class_='fxx_wb')] #得到每个研报的链接

t = [i.string for i in soup.find_all(text=re.compile('\d+-\d+-\d'))] # 得到研报发布时间

l1.extend(stockname)

l2.extend(t)

d['stockname'] = l1

d['time'] = l2

return d

if __name__ == '__main__':

a = time.time()

p = Pool(4)

results = []

for i in range(1,5):

res = p.apply_async(f, args=(i, ))

results.append(res)

p.close()

p.join()

for res in results:

print res.get()

print(time.time()-a)

wx.jpg

扫一扫关注IT屋

微信公众号搜索 “ IT屋 ” ,选择关注与百万开发者在一起

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值