आपका प्रश्न करने के लिए बहुत करीब है "कैसे कार्यक्रम चलाने के लिए समारोह कॉल जोड़ने के लिए?"
जब आपको ईवेंट लूप में बिल्कुल नया कोरआउट जोड़ना होगा?
चलो कुछ उदाहरण देखें। यहां कार्यक्रम कि parallely दो coroutines के साथ घटना पाश शुरू होता है:
import asyncio
from random import randint
async def coro1():
res = randint(0,3)
await asyncio.sleep(res)
print('coro1 finished with output {}'.format(res))
return res
async def main():
await asyncio.gather(
coro1(),
coro1()
) # here we have two coroutines running parallely
if __name__ == "__main__":
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
आउटपुट:
coro1 finished with output 1
coro1 finished with output 2
[Finished in 2.2s]
हो सकता है आप कुछ coroutines कि coro1
के परिणाम ले जाएगा जोड़ सकते हैं और जैसे ही यह तैयार है इसका इस्तेमाल करने की जरूरत है? उस मामले में सिर्फ coroutine कि coro1
का इंतजार है और यह मूल्य लौटा रहा है का उपयोग बनाने के लिए:
import asyncio
from random import randint
async def coro1():
res = randint(0,3)
await asyncio.sleep(res)
print('coro1 finished with output {}'.format(res))
return res
async def coro2():
res = await coro1()
res = res * res
await asyncio.sleep(res)
print('coro2 finished with output {}'.format(res))
return res
async def main():
await asyncio.gather(
coro2(),
coro2()
) # here we have two coroutines running parallely
if __name__ == "__main__":
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
आउटपुट:
coro1 finished with output 1
coro2 finished with output 1
coro1 finished with output 3
coro2 finished with output 9
[Finished in 12.2s]
विशिष्ट वाक्यविन्यास के साथ नियमित कार्यों के बारे में के रूप में coroutines के बारे में सोचो। आप समांतर रूप से निष्पादित करने के लिए कुछ फ़ंक्शन शुरू कर सकते हैं (asyncio.gather
द्वारा), आप पहले किए जाने के बाद अगला फ़ंक्शन शुरू कर सकते हैं, आप नए फ़ंक्शन बना सकते हैं जो दूसरों को कॉल करते हैं।
स्रोत
2015-12-30 08:21:44
प्रयास के लिए धन्यवाद, लेकिन जहां तक मैं समझता हूँ, इस सवाल का जवाब गलत है। यहां 'मुख्य' का पहला आवेषण कोरआउटिन बनाता है और उसके बाद लूप शुरू होता है। दूसरे शब्दों में, यह उदाहरण लूप शुरू होने से पहले कोरआउट को शेड्यूल करता है। जो मैंने नहीं पूछा वह है। – Petri
'मुख्य' बस एक रैपर के रूप में है; मैं सिर्फ 'loop.create_task' के उपयोग को इंगित करना चाहता था। 'create_task' वही करता है जो आप चाहते हैं। - मैंने यह स्पष्ट करने के लिए उदाहरण संपादित किया है कि 'create_task' चलाने से पहले 'मुख्य' ब्लॉक होगा। –