Maison  >  Questions et réponses  >  le corps du texte

Requêtes Comment interrompre une requête ?

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 ?

PHPzPHPz2711 Il y a quelques jours1287

répondre à tous(1)je répondrai

  • 天蓬老师

    天蓬老师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()

    répondre
    0
  • Annulerrépondre