对于项目,我们需要通过API(HTTP / 1.1)请求数据,根据您发现的内容,您可以发送带有指令的request.post,之后API将发回响应。我使程序多线程,以便主程序不断请求数据,以防我想发布一个指令,我产生一个线程来做到这一点。 (请求数据只需1秒,其中发布指令和获取回复最多可能需要3秒才能响应)
然而我遇到的问题是,有时我的一个线程会挂起并且只有在我发出命令thread.join()时才会完成。我可以看到它挂起,因为我在主线程中获得的数据应该类似于我的先前的指令(由线程发送),(我允许服务器的5秒周期类似于我之前发送的指令,因此不是服务器尚未更新的情况)。如果我现在再次发送相同的指令,我会发现现在两个指令都发送到服务器(挂起的指令和新发布的指令)。因此,以某种方式发送新指令会产生副作用,之前的指令也会发送。
问题看起来与线程有关,因为我的代码在执行串行时不会挂起。查看像this这样的帖子没有帮助,因为我事先并不知道我的异步请求需要什么。重要的是我要使用持久连接并重用它们,因为这样可以节省大量的握手时间等。
我的问题:
示例代码:
import requests
from threading import Thread
req = requests.Session()
adapter = requests.adapters.HTTPAdapter(pool_connections = 10, pool_maxsize=10)
req.mount('',adapter)
url='http://python-requests.org'
def main(url=''):
thread_list=[]
counter=0
while True:
resp = req.get(url)
interesting = 1 #
if interesting:
instructions = {}
a = Thread(target = send_instructions, kwargs = dict(url = url, instructions = instructions))
a.start()
thread_list.append(a)
tmp=[]
for x in thread_list:
if x.isAlive():
tmp.append(x)
thread_list = tmp
if counter>10:
break
counter+=1
def send_instructions(url='', instructions=''):
resp=req.post(url, headers = instructions)
print(resp)
main(url)