吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2632|回复: 5
收起左侧

[Python 转载] 仅供参考和学习,python多线程查询天气情况

[复制链接]
huguo002 发表于 2019-7-12 16:39
仅供参考和学习,python多线程查询天气情况
仅供参考和学习,python多线程查询天气情况
[Python] 纯文本查看 复制代码
#天气查询例子

import requests
import json
import re
import threading
import time
from multiprocessing.dummy import Pool as ThreadPool #多线程


def get_weather(city):
    url=f"https://wthrcdn.etouch.cn/weather_mini?city={city}"
    try:
        requests.packages.urllib3.disable_warnings() #取消警告报错 (提示警告InsecureRequestWarning的问题处理)
        html=requests.get(url, verify=False).json()  # 请求API接口,取消了HTTPS验证
        dates=html['data']['forecast'][0]
        wind = re.findall("\<\!\[CDATA\[(.*?)\]\]\>", dates["fengli"], re.S)[0]  # 正则获取风力大小
        #print(dates)
        print('\n')
        print('-----------------------------------')
        print(f"城市:{city}")
        print(f"日期:{dates['date']}")
        print(f"最高温度:{dates['high']}")
        print(f'风力大小:{wind}')
        print(f"最低温度:{dates['low']}")
        print(f"风向:{dates['fengxiang']}")
        print(f"天气:{dates['type']}")
        print('-----------------------------------')
        print('\n')
    except:
        print(f"获取{city}天气情况失败!")



def get_weather2(url):
    try:
        requests.packages.urllib3.disable_warnings() #取消警告报错 (提示警告InsecureRequestWarning的问题处理)
        html=requests.get(url, verify=False).json()  # 请求API接口,取消了HTTPS验证
        dates=html['data']['forecast'][0]
        wind = re.findall("\<\!\[CDATA\[(.*?)\]\]\>", dates["fengli"], re.S)[0]  # 正则获取风力大小
        #print(dates)
        print('\n')
        print('-----------------------------------')
        print(f"日期:{dates['date']}")
        print(f"最高温度:{dates['high']}")
        print(f'风力大小:{wind}')
        print(f"最低温度:{dates['low']}")
        print(f"风向:{dates['fengxiang']}")
        print(f"天气:{dates['type']}")
        print('-----------------------------------')
        print('\n')
    except:
        print(f"获取天气情况失败!")




def get_thread():
    threads=[]
    city_data=[
        '深圳','广州','上海','赣州','北京','天津','南京','大理','武汉','长沙','九江'
    ]
    num=range(len(city_data))
    #print(num)
    for i in num:
        t=threading.Thread(target=get_weather,args=(city_data[i],))
        threads.append(t)

    for i in num:
        threads[i].start()
        time.sleep(0.5)

    for i in num:
        threads[i].join()

    print("获取城市天气情况完成!")




def get_thread2():
    urls=[]
    city_data=[
            '深圳','广州','上海','赣州','北京','天津','南京','大理','武汉','长沙','九江'
        ]
    for data in city_data:
        url=f'https://wthrcdn.etouch.cn/weather_mini?city={data}'
        urls.append(url)
    print(urls)
    try:
        # 开4个 worker,没有参数时默认是 cpu 的核心数
        pool = ThreadPool()
        results = pool.map(get_weather2,urls)
        pool.close()
        pool.join()
        print("获取城市天气情况完成!")
    except:
        print("Error: unable to start thread")


get_thread()
get_thread2()



发帖不易,有帮助的话,麻烦贵手给个热心,给个赞!
有问题欢迎交流!

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
lvyan + 1 + 1 热心回复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

XG3062 发表于 2019-7-12 16:53
在学python,试试
nickle52 发表于 2019-7-12 16:58
30900 发表于 2019-7-12 21:37
kge369 发表于 2019-7-12 22:35
支持一下
fa00x 发表于 2019-7-13 19:37
多线程学习了。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-16 11:26

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表