मेरे पास पोस्ट किए गए अधिकांश उत्तरों के साथ बहुत सारे मुद्दे हैं - वे या तो पदावनत पुस्तकालयों का उपयोग करते हैं जिन्हें सीमित विशेषताओं के साथ चित्रित किया गया है, या अनुरोध के निष्पादन पर बहुत अधिक जादू के साथ एक समाधान प्रदान करते हैं, जिससे त्रुटि संभालना मुश्किल हो जाता है। यदि वे उपरोक्त श्रेणियों में से एक में नहीं आते हैं, तो वे 3rd पार्टी लाइब्रेरी या पदावनत हैं।
कुछ समाधान http अनुरोधों में पूरी तरह से ठीक से काम करते हैं, लेकिन समाधान किसी अन्य प्रकार के अनुरोध के लिए कम हो जाते हैं, जो कि आकर्षक है। यहां अत्यधिक अनुकूलित समाधान आवश्यक नहीं है।
बस अंतर्निहित लाइब्रेरी asyncio
का उपयोग किसी भी प्रकार के अतुल्यकालिक अनुरोधों को पूरा करने के लिए पर्याप्त है, साथ ही साथ जटिल और usecase विशिष्ट त्रुटि से निपटने के लिए पर्याप्त तरलता प्रदान करता है।
import asyncio
loop = asyncio.get_event_loop()
def do_thing(params):
async def get_rpc_info_and_do_chores(id):
# do things
response = perform_grpc_call(id)
do_chores(response)
async def get_httpapi_info_and_do_chores(id):
# do things
response = requests.get(URL)
do_chores(response)
async_tasks = []
for element in list(params.list_of_things):
async_tasks.append(loop.create_task(get_chan_info_and_do_chores(id)))
async_tasks.append(loop.create_task(get_httpapi_info_and_do_chores(ch_id)))
loop.run_until_complete(asyncio.gather(*async_tasks))
यह कैसे काम करता है सरल है। आप उन कार्यों की एक श्रृंखला बना रहे हैं, जिन्हें आप अतुल्यकालिक रूप से प्राप्त करना चाहते हैं, और फिर एक पाश को उन कार्यों को निष्पादित करने और पूरा होने पर बाहर निकलने के लिए कह रहे हैं। कोई अतिरिक्त पुस्तकालय रखरखाव की कमी के अधीन है, कार्यक्षमता की कोई कमी की आवश्यकता नहीं है।