cho mã này:cách bật yêu cầu chế độ không đồng bộ?
import sys
import gevent
from gevent import monkey
monkey.patch_all()
import requests
import urllib2
def worker(url, use_urllib2=False):
if use_urllib2:
content = urllib2.urlopen(url).read().lower()
else:
content = requests.get(url, prefetch=True).content.lower()
title = content.split('<title>')[1].split('</title>')[0].strip()
urls = ['http://www.mail.ru']*5
def by_requests():
jobs = [gevent.spawn(worker, url) for url in urls]
gevent.joinall(jobs)
def by_urllib2():
jobs = [gevent.spawn(worker, url, True) for url in urls]
gevent.joinall(jobs)
if __name__=='__main__':
from timeit import Timer
t = Timer(stmt="by_requests()", setup="from __main__ import by_requests")
print 'by requests: %s seconds'%t.timeit(number=3)
t = Timer(stmt="by_urllib2()", setup="from __main__ import by_urllib2")
print 'by urllib2: %s seconds'%t.timeit(number=3)
sys.exit(0)
kết quả này:
by requests: 18.3397213892 seconds
by urllib2: 2.48605842363 seconds
trong sniffer có vẻ này:
mô tả: 5 yêu cầu đầu tiên được sended bởi thư viện yêu cầu, 5 yêu cầu tiếp theo là được gửi bởi thư viện urllib2. màu đỏ - là thời gian khi công việc bị đóng băng, tối - khi dữ liệu nhận được ... wtf ?!
Làm thế nào để đặt thư viện socket được vá và thư viện phải hoạt động giống nhau? Cách yêu cầu sử dụng mà không có yêu cầu. Đồng bộ hóa cho công việc không đồng bộ?
bạn có thể giải thích vấn đề của bạn một chút nữa? Tại sao bạn không muốn sử dụng mô-đun requests.async? – Phani
Yêu cầu không hoạt động không đồng bộ. Tại sao? Tôi không muốn sử dụng requests.async vì có chứa giao diện xấu để sử dụng và không làm việc không đồng bộ quá. Nhìn vào hình ảnh, có thể nhìn thấy cách yêu cầu công việc và urllib2. – user1239798
Xem http://stackoverflow.com/questions/9110593/asynchronous-requests-with-python-requests và https://github.com/kennethreitz/grequests. –