Python 3.5 жүйесінде синхрондауды қалай күтуге болады?

 #!/usr/bin/env python3 # -*- coding: utf-8 -*- import time async def foo(): await time.sleep(1) foo() 

Мен бұл өлі қарапайым мысалды іске асыра алмадым:

 RuntimeWarning: coroutine 'foo' was never awaited foo() 
49
27 сент. smilingpoplar 27 сағ . 2015-09-27 17:19 '15 at 17:19 2015-09-27 17:19
@ 2 жауаптар

Қосылымдарды іске қосу оқиғалардың циклын қажет етеді. Оны жасау үшін asyncio() кітапханасын пайдаланыңыз:

 import asyncio # Python 3.7+ asyncio.run(foo()) 

немесе

 # Python 3.6 and older loop = asyncio.get_event_loop() loop.run_until_complete(foo()) 

asyncio құжаттамасындағы «Міндеттер мен asyncio » тарауын да қараңыз. Егер сізде цикл жұмыс істеп asyncio.create_task(...) , Python 3-де 7-ші, asyncio.ensure_future(...) ескі нұсқаларда тапсырманы ( asyncio.create_task(...) жасай отырып, қосымша сопрограммаларды іске қосу керек)

time.sleep() бұл күтілетін объект емес. None 1 секундтан кейін сіз алып тастайды:

 >>> asyncio.run(foo()) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/.../lib/python3.7/asyncio/runners.py", line 43, in run return loop.run_until_complete(main) File "/.../lib/python3.7/asyncio/base_events.py", line 573, in run_until_complete return future.result() File "<stdin>", line 2, in foo TypeError: object NoneType can't be used in 'await' expression 

Бұл жағдайда asyncio.sleep() қолданыңыз:

 async def foo(): await asyncio.sleep(1) 

басқа міндеттерді орындау үшін циклмен өзара әрекеттеседі. Асинхронды емес эквиваленттері жоқ үшінші тарап кітапханаларының кодтарын бұғаттау үшін осы кодты орындаушылар пулында іске қосуға болады. Asyncio дизайнерлік нұсқаулығында Құлып кодын іске қосу бөлімін қараңыз.

67
27 сент. жауап Martijn Pieters 27 жауап берді . 2015-09-27 17:25 Сағат 15: 25-те

Егер цикл қазірдің өзінде іске қосылған болса (кейбір басқа тапсырмалармен) келесі тапсырмаларды қолдануға болады:

 asyncio.ensure_future(foo()) 

әйтпесе сіз аласыз

border=0
 The event loop is already running 

қате

2
09 мая '18 в 16:06 2018-05-09 16:06 lenooh 09 мамыр күні сағат 16: 18-те берілген жауап 2018-05-09 16:06

тегтеріне қатысты басқа сұрақтар немесе Сұрақ қою