设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
查看: 11502|回复: 0
打印 上一主题 下一主题

Python第72课,多线程

[复制链接]

1

主题

0

好友

7

积分

新手上路

Rank: 1

跳转到指定楼层
楼主
发表于 2021-5-15 13:48:45 |显示全部楼层 |倒序浏览
我的代码和课程中代码完全一样,为何得不到课程中的结果?代码和得到的结果如下:

#-*-coding: 'utf-8' -*-

import requests, threading   #引入requests的模块和threading的模块

def get_weather(city):
    req=requests.get('http://wthrcdn.etouch.cn/weather_mini?city=%s' % city)  #用get方法打开该网址,并将结果保存在变量req中
    #print(req)
    dic_city=req.json() #把json格式的数据转换为字典
    #print(dic_city)

    city_data=dic_city.get('data')  #用字典的get方法,没有data的话返回[]
    #print(city_data.get('city'))
    if city_data:
        city_forecast=city_data['forecast'][0]
        print(
            city_data.get('city'),
            city_forecast.get('date'),
            city_forecast.get('high'),
            city_forecast.get('low'),
            city_forecast.get('type')
        )
    else:
        print('未获得')
    #print()

threads=[]
cities=['北京', '上海', '南京 ', '深圳', '广州', '杭州', '苏州','天津', '西安', '成都']
files=range(len(cities))
#第一个循环,针对每一个城市,都创建一个新线程,并将线程加入到一个列表中,用于之后的启动
for i in files:  #创建线程
    t=threading.Thread(target=get_weather, args=(cities,))
    threads.append(t)
#第二个循环,start正式开启子线程
for i in files:
    threads.start()
#第三个循环,join用来同步数据,主线程运行到这一步,将会停下来等待子线程运行完毕
#若没有这句,主线程会忽略子线程,运行完自己的代码后结束程序
for i in files:
    threads.join()
print('结束获取')

我得到的结果中,城市和对应的天气不对应在一起,见图片所示。
看起来乱乱的,而课程中的结果城市和对应的天气是在一行的。 屏幕截图 2021-05-15 134557.jpg
这是为什么呢?







回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-5-3 21:06 , Processed in 0.019156 second(s), 27 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部