基本上我需要同时运行两个while循环。原因是我需要一个循环来更新GUI,另一个是检查程序是否连接到互联网。所以这可能需要多线程,或者我只是一个网页来解决我的问题。这是我的源代码:
# -*- coding: utf-8 -*-
import sys
import urllib2
from Tkinter import *
import time
import socket
def TheMainProgram():
airid = 'http://www.aviationweather.gov/metar/data?ids={airid}&format=raw&hours=0&taf=off&layout=off&date=0'.format(airid=e1.get())
website = urllib2.urlopen(airid)
website_html = website.read()
data_start = website_html.find("<!-- Data starts here -->")
br1 = data_start + 25
br2 = website_html.find("<br />")
metar_slice = website_html[br1:br2]
print("Here is the undecoded METAR data:\n"+metar_slice)
root2 = Tk()
root2.title("#Conection_Made#")
metar_dat_label = Label(root2, text="Here is the undecoded METAR data:")
metar_dat_label_ln_2 = Label(root2, text=metar_slice)
metar_dat_label.grid(row=0)
metar_dat_label_ln_2.grid(row=1)
def _quit():
sys.exit()
def internet(host="8.8.8.8", port=53, timeout=3):
try:
socket.setdefaulttimeout(timeout)
socket.socket(socket.AF_INET, socket.SOCK_STREAM).connect((host, port))
return True
except Exception:
return False
def tkupdate():
while True:
root1.update()
def internet_loop():
while True:
out = internet()
if out == True:
connetion2internet.configure(text="YOU ARE CONNECTED TO THE INTERNET", fg="green")
if out == False:
connetion2internet.configure(text="YOU ARE NOT CONNECTED TO THE INTERNET", fg="red")
root1 = Tk()
root1.title("Welcome")
warning = Label(root1, text="*********** WARNING REQURIES INTERET TO RUN ***********")
warning.grid(row=0)
connetion2internet = Label(root1, text="")
connetion2internet.grid(row=1)
airport_code = Label(root1,text="Enter Airport Code:")
airport_code.grid(row=2, sticky="W")
e1 = Entry(root1)
e1.grid(row=2, sticky="E")
button1 = Button(root1, text="Contunue", command=daMainProgram).grid(row=3, sticky="W")
button2 = Button(root1, text="Quit", command=_quit)
button2.grid(row=3, sticky="E")
tkupdate()
internet_loop()
答案 0 :(得分:1)
如下所示。产生两个过程。每个都并行运行,目标函数可以用自己的函数替换。
from multiprocessing import Process
from time import sleep
def func1():
while True:
print("func1 up and running")
sleep(1)
def func2():
while True:
print("func2 up and running")
sleep(1)
if __name__ == '__main__':
proc1 = Process(target=func1)
proc1.start()
proc2 = Process(target=func2)
proc2.start()
输出结果为:
func1 up and running
func2 up and running
func1 up and running
func2 up and running
func1 up and running
func2 up and running
func1 up and running
func2 up and running
...