Maison > Questions et réponses > le corps du texte
Comment interrompre les requêtes dans les requêtes en python ? J'ai utilisé plusieurs threads pour obtenir simultanément, mais je n'ai pas pu trouver l'opération de demande d'arrêt. Je ne pouvais qu'attendre la fin du thread. J'ai déjà utilisé des sockets et j'y ai simplement écrit un statut pour arrêter la lecture. les demandes n’ont pas trouvé de méthode similaire.
import requests
from threading import Thread
from contextlib import closing
import json
import time
class TestT(Thread):
def __init__(self):
super(TestT, self).__init__()
self.s = requests.session()
def stop(self):
self.p.connection.close()
self.s.close()
def run(self):
t = time.time()
self.p = self.s.get('http://api2.qingmo.com/api/column/tree/one?Pid=8&Child=1', stream=True, timeout=10)
# 消耗了很多时间
print time.time()-t
with closing(self.p) as r:
print time.time()-t
data = ''
for chunk in r.iter_content(4096):
data += chunk
print json.loads(data)
print time.time()-t
t = TestT()
t.start()
t.join(30)
t.stop()
t.join()
Je l'ai changé et utilisé la lecture en streaming, mais lors de la réception, cela prenait encore plus de 3 secondes. Comment interrompre ces 3 secondes ?
天蓬老师2017-05-18 10:55:01
Ajoutez une variable IsStop puis revenez pour arrêter le fil
import requests
from threading import Thread
from contextlib import closing
import json
import time
class TestT(Thread):
def __init__(self):
super(TestT, self).__init__()
self.s = requests.session()
self.IsStop = False
def stop(self):
self.p.connection.close()
self.s.close()
self.IsStop = True
def run(self):
t = time.time()
self.p = self.s.get('http://api2.qingmo.com/api/column/tree/one?Pid=8&Child=1', stream=True, timeout=10)
# 消耗了很多时间
print time.time()-t
with closing(self.p) as r:
print time.time()-t
data = ''
for chunk in r.iter_content(4096):
if self.IsStop : return None
data += chunk
print json.loads(data)
print time.time()-t
t = TestT()
t.start()
t.join(30)
t.stop()
t.join()