मैं aiohttp उपयोग कर रहा हूँ इस तरह अजगर 3.4 में एक सरल HTTP अनुरोध बनाने के लिए कैश करने के लिए कैसे:asyncio coroutines
response = yield from aiohttp.get(url)
आवेदन फिर से पर एक ही यूआरएल का अनुरोध करता है तो स्वाभाविक रूप से मैं इसे कैश करने के लिए करना चाहता था। मेरा पहला प्रयास कुछ इस तरह था:
@functools.lru_cache(maxsize=128)
def cached_request(url):
return aiohttp.get(url)
cached_request
करने के लिए पहली कॉल ठीक काम करता है, लेकिन बाद में कॉल में मैं प्रतिक्रिया ऑब्जेक्ट के बजाय None
साथ खत्म।
मैं एसिन्सीओ के लिए नया हूं इसलिए मैंने asyncio.coroutine
सजावट, yield from
और कुछ अन्य चीजों के कई संयोजनों की कोशिश की, लेकिन कोई भी काम नहीं कर रहा था।
तो कैशिंग कोरिंग कैसे काम करता है?
सुनिश्चित नहीं हैं कि आप एक coroutine कैशिंग द्वारा क्या मतलब है? जैसे इसे एक चर के रूप में सहेजें ताकि आप इसे बार-बार कॉल कर सकें? परिणाम को तब तक सहेजें जब तक परिणाम बाद में निष्पादन पर प्रतिस्थापित नहीं किया जाता है? या बाद में एक ही कोरआउट दोहराया गया है? – shongololo
@shongololo मैं coroutine के परिणाम कैश करना चाहता हूँ। – tobib
मैं functools.lru_cache() से परिचित नहीं हूं लेकिन यदि आप बस अपडेट किए गए परिणामों को वापस करना चाहते हैं, तो क्या कोई कारण है कि आप अपडेट किए गए परिणामों को एक चर में सहेजते नहीं हैं? फिर भी, एक एसिंक्रोनस विधि (जैसे 'aiohttp.get()') का उपयोग करते समय आपको इसे किसी चीज़ से ड्राइव करना होगा। तो cached_request को '@ asyncio.coroutine' के साथ संलग्न किया जाना है; इसे 'सेल्ड' का उपयोग करके बुलाया जाना है; और रिटर्न स्टेटमेंट 'रिटर्न की लाइनों के साथ तैयार किया जाना चाहिए (aiohttp.get (url) से उपज) ' – shongololo