类似AJAX的非阻塞异步Python请求

时间:2017-07-14 14:21:49

标签: python asynchronous python-requests

我查看了许多问题和答案,但没有一个对我有用。 有没有办法在Python中实现类似AJAX的功能?

假设你有这个设置:

url = "http://httpbin.org/delay/5"
print(requests.get(url))
foo()

requests.get阻止代码执行时,foo()在获得服务器响应之前不会触发。

例如,在Javascript中,脚本继续工作:

var requests = {
    get: function(url, callback) {
        var xhttp = new XMLHttpRequest();
        xhttp.onreadystatechange = function() {
            if (this.readyState == 4 && this.status == 200) {
                callback(this);
            }
        };
        xhttp.open("GET", url, true);
        xhttp.send();
    }
}

function response_goes_through_here(r) {
    console.log(r.responseText);

}

var url = "http://httpbin.org/delay/5"
requests.get(url, response_goes_through_here)
foo()

我尝试了grequests,但它仍然会挂起,直到整个队列完成。

1 个答案:

答案 0 :(得分:0)

如果您能够使用Python 3,请查看aiohttp。它允许您创建和处理异步请求,如:

async with aiohttp.ClientSession() as session:
    async with session.get('https://api.github.com/events') as resp:
        print(resp.status)
        print(await resp.text()