因此,对于我的程序,我需要检查本地网络上的客户端,该客户端正在运行Flask服务器。此Flask服务器返回一个能够更改的号码。
现在要检索该值,我使用请求库和BeautifulSoup。
我想在我的脚本的另一部分中使用检索到的值(同时连续检查另一个客户端)。为此,我想我可以使用线程模块。
然而问题是,线程只有在完成循环时返回它的值,但循环必须是无限的。
这是我到目前为止所得到的:
import threading
import requests
from bs4 import BeautifulSoup
def checkClient():
while True:
page = requests.get('http://192.168.1.25/8080')
soup = BeautifulSoup(page.text, 'html.parser')
value = soup.find('div', class_='valueDecibel')
print(value)
t1 = threading.Thread(target=checkClient, name=checkClient)
t1.start()
有谁知道如何将打印值返回到另一个函数?当然,您可以使用某种值替换requests.get url,其中值会发生很大变化。
答案 0 :(得分:3)
你需要一个Queue
和一些正在侦听的队列
import queue
import threading
import requests
from bs4 import BeautifulSoup
def checkClient(q):
while True:
page = requests.get('http://192.168.1.25/8080')
soup = BeautifulSoup(page.text, 'html.parser')
value = soup.find('div', class_='valueDecibel')
q.put(value)
q = queue.Queue()
t1 = threading.Thread(target=checkClient, name=checkClient, args=(q,))
t1.start()
while True:
value = q.get()
print(value)
Queue
是线程安全的,允许来回传递值。在你的情况下,他们只是从线程发送到接收者。