python - 如何制作 while(True) : two loops run at same time in python

标签 python multithreading python-3.x tkinter urllib2

基本上我需要同时运行两个 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()

最佳答案

像下面这样的怎么样?产生两个进程。每个函数都是并行运行的,并且目标函数可以替换为您自己的函数。

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
...

关于python - 如何制作 while(True) : two loops run at same time in python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45909604/

相关文章:

C - For循环做一个简单的操作,不增加计数器

python - 在 Django 中获取对另一个应用程序中模型的引用

python - 在同一页面 Django 中显示两个模型

python - 使用循环从列表中查找最高分、最低分

Java exec方法,如何正确处理流

c++ - C++ 中的跨平台多线程?

python - matplotlib散点图在x轴上改变距离

javascript - 使用 Javascript 将页面打印为 PDF(使用 Django)

python - 无法安装Numpy+MKL

Python TemporaryDirectory 在 "with"语句中使用时返回字符串