问题
Basically I need to run two while loops at the same time. The reason being that I need one loop to update the GUI, and the other to check if the program is connected to the internet. So maybe this requires multi-threading, or maybe I am just one webpage away to fixing my problem. Here's my source code:
# -*- 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()
回答1:
How about something like the following. Spawn two processes. Each one runs in parallel and the target functions can be replaced with your own.
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()
The output is:
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
...
来源:https://stackoverflow.com/questions/45909604/how-to-make-whiletrue-two-loops-run-at-same-time-in-python