zoukankan      html  css  js  c++  java
  • day 33 线程池有关的

    # cpu 的核心数
    # import os
    # print(os.cpu_count()) #
    # 爬虫的进程和线程的应用
    # 第一步 虚拟一个浏览器下载 在cmd 里输入 pip install requests 会下载并安装成功后
    # requests 意思就下载网站的源代码 没有解析的功能
    # import requests
    # response = requests.get('https://www.python.org')
    # # print(response) #
    # # 结果:<Response [200]> 只是内容网站内容并不会给解析
    # print(response.text) # 类型字符串 就是源代码
    # # =================================
    # 题目 解析网址的长度
    # import requests
    # from threading import current_thread # 什么意思
    # urls = ['https://www.python.org',
    # 'https://www.baidu.com',
    # 'https://www.jd.com',
    # 'https://www.tmall.com',]
    # def get(url):
    # print('%s GET %s'%(current_thread().getName(),url)) #谁在拿到谁
    # ##### current_thread().gernName() 好像是
    # response = requests.get(url)
    # if response.status_code == 200: #固定的 下载200才算成功
    # return {'url':url,'text':response.text}
    ### get(url) 是拿到网址 和内容 返回值给下边prase函数的上传参数 res
    # def prase(res): #解析
    # print('%s GET %s'%(current_thread().getName(),res['url']))
    # # ##print('[%s] prase res [%s]'%(res['url'],res['text'])) # ##和下边的是一样的 这个暂时不用
    # print('[%s] prase res [%s]'% (res['url'],len(res['text']))) #结果用长度替换字典的网址内容代码
    ##以上两行可以写成一行
    # print('[%s] <%s> (%s)'%(current_thread().getName(),res['url'],len(res['text'])))

    # 方法一 普通
    # for url in urls:
    # res = get(url)
    # prase(res)
    # 结果: 通过循环正常 串着执行 打印出
    # MainThread GET https://www.python.org
    # MainThread GET https://www.python.org
    # [https://www.python.org] prase res [48856]
    # MainThread GET https://www.baidu.com
    # MainThread GET https://www.baidu.com
    # [https://www.baidu.com] prase res [2443]
    # MainThread GET https://www.jd.com
    # MainThread GET https://www.jd.com
    # [https://www.jd.com] prase res [124541]
    # MainThread GET https://www.tmall.com
    # MainThread GET https://www.tmall.com
    # [https://www.tmall.com] prase res [212078]
    #
    # ------------------------------
    #''
    # 异步调用:
    # 提交完任务(为该任务绑定一个回调函数),不用再原地等任务执行完毕拿到结果,可以直接提交下一个任务
    # 一个任务一旦执行完毕就会自动触发回调函数的运行
    #
    # 回调函数的参数是单一的:
    # 回调函数的参数就是它所绑定任务的返回值
    # 进程的用法
    import requests
    from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor
    from threading import current_thread
    import time,os
    def get(url):
    print('%s GET %s' %(os.getpid(),url))
    response=requests.get(url)
    time.sleep(3)
    if response.status_code == 200:
    return {'url':url,'text':response.text}
    def parse(obj):
    res=obj.result()
    print('[%s] <%s> (%s)' % (os.getpid(), res['url'],len(res['text'])))
    if __name__ == '__main__':
    urls = [
    'https://www.python.org',
    'https://www.baidu.com',
    'https://www.jd.com',
    'https://www.tmall.com', ]
    t=ProcessPoolExecutor(2)
    for url in urls:
    t.submit(get,url).add_done_callback(parse)
    #add_done_callback(parse) 相当于一个按钮 前面对象结束后自动触发
    # 作用 增加一个回调函数
    t.shutdown(wait=True)
    print('主',os.getpid())



    线程的应用
    import requests
    from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor
    from threading import current_thread
    import time
    import os
    def get(url):
    print('%s GET %s' %(current_thread().getName(),url))
    response=requests.get(url)
    time.sleep(3)
    if response.status_code == 200:
    return {'url':url,'text':response.text}
    def parse(obj):
    res=obj.result()
    print('[%s] <%s> (%s)' % (current_thread().getName(), res['url'],len(res['text'])))
    if __name__ == '__main__':
    urls = [
    'https://www.python.org',
    'https://www.baidu.com',
    'https://www.jd.com',
    'https://www.tmall.com',
    ]
    t=ThreadPoolExecutor(2)
    for url in urls:
    # obj = t.submit(get,url)
    # obj.result()
    t.submit(get,url).add_done_callback(parse)
    t.shutdown(wait=True)
    print('主',os.getpid())
  • 相关阅读:
    UVA 10618 Tango Tango Insurrection
    UVA 10118 Free Candies
    HDU 1024 Max Sum Plus Plus
    POJ 1984 Navigation Nightmare
    CODEVS 3546 矩阵链乘法
    UVA 1625 Color Length
    UVA 1347 Tour
    UVA 437 The Tower of Babylon
    UVA 1622 Robot
    UVA127-"Accordian" Patience(模拟)
  • 原文地址:https://www.cnblogs.com/xiaoluoboer/p/7943266.html
Copyright © 2011-2022 走看看