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

发布于 2022-09-05 09:24:17 字数 1090 浏览 18 评论 0

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 在使用多进程时,如何把函数的返回值赋值给另一个变量。 初学者,多指教

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

2022-09-12 09:24:17

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

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)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文