为了账号安全,请及时绑定邮箱和手机立即绑定

从线程中取回变量

从线程中取回变量

婷婷同学_ 2022-06-02 18:16:28
我正在构建一个系统,它有很多进程在一边运行,一个是 - 获取用户 IP。为此,我使用 Thread 并且需要取回变量。在函数之外,结果始终为 None,但在循环中,它会不断打印我的 IP 地址。结果我的输出是:没有任何你的ip是:85.206.**.*我的代码:IPadress = Nonedef Get_IP():    while True:        try:            data = urlopen(Ip_Url).read()            adressas = data.decode('UTF-8')            global IPadress            IPadress = adressas            print("Your ip is : ", IPadress)        except Exception as erroras:            print("Can't connect!", erroras)            time.sleep(5)            sys.exit()        time.sleep(5)Thread(target = Get_IP).start()print(IPadress)如何从函数外的线程获取结果?
查看完整描述

3 回答

?
慕标5832272

TA贡献1966条经验 获得超4个赞

print语句print(IPadress)在函数中的web请求完成之前执行。这就是打印结果为None. 如果您在打印前等待几秒钟,它将保存 IP 地址值。

您还可以使用锁定变量来确保仅在请求执行后才读取该变量。


查看完整回答
反对 回复 2022-06-02
?
慕村225694

TA贡献1880条经验 获得超4个赞

当您启动线程并希望在继续之前从每个线程中获取结果时,请尝试使用.joinThread 库的方法提供的障碍。因此,与其等待一些您有时可能不确定的恒定时间,不如尝试使用这种方法-


thread = Thread(target = Get_IP)

thread.start()

thread.join()

print(IPadress)

你的问题的整个解决方案可能看起来像 -


def Get_IP():

    while True:

        try:

            data = urlopen(Ip_Url).read()

            adresses = data.decode('UTF-8')

            global IPadress

            IPadress = adressas

            print("Your ip is : ", IPadress)

            if IPadress: break

        except Exception as erroras:

            print("Can't connect!", erroras)

            time.sleep(5)

            sys.exit()

        time.sleep(5)


thread = Thread(target = Get_IP)

thread.start()

thread.join()

print(IPadress)


查看完整回答
反对 回复 2022-06-02
?
MM们

TA贡献1886条经验 获得超2个赞

只需添加一个简单的 time.sleep(),等待几秒钟即可下载字符串,现在它运行良好。


  IPadress = None

    def Get_IP():

        while True:

            try:

                Ip_Url = 'https://ipecho.net/plain'

                data = urlopen(Ip_Url).read()

                adressas = data.decode('UTF-8')

                global IPadress

                IPadress = adressas

                #print("Your ip is : ", IPadress)

            except Exception as erroras:

                print("Can't connect!", erroras)

                time.sleep(5)

                sys.exit()

            time.sleep(5)

    Thread(target = Get_IP).start()

    time.sleep(0.5)

    print(IPadress)


    print("Jusu IP:",IPadress)


查看完整回答
反对 回复 2022-06-02
  • 3 回答
  • 0 关注
  • 127 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信