猿问

从线程中取回变量

我正在构建一个系统,它有很多进程在一边运行,一个是 - 获取用户 IP。为此,我使用 Thread 并且需要取回变量。在函数之外,结果始终为 None,但在循环中,它会不断打印我的 IP 地址。结果我的输出是:


没有任何


你的ip是:85.206.**.*


我的代码:


IPadress = None

def 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)

如何从函数外的线程获取结果?


婷婷同学_
浏览 128回答 3
3回答

慕标5832272

print语句print(IPadress)在函数中的web请求完成之前执行。这就是打印结果为None. 如果您在打印前等待几秒钟,它将保存 IP 地址值。您还可以使用锁定变量来确保仅在请求执行后才读取该变量。

慕村225694

当您启动线程并希望在继续之前从每个线程中获取结果时,请尝试使用.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)

MM们

只需添加一个简单的 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)
随时随地看视频慕课网APP

相关分类

Python
我要回答