İsteğe bağlı olarak, kendi yöntemleri ve işlevleri, coroutines değil gibi kullanabilmek için son kullanıcıları istiyorum bir kitaplık yazıyorum. Bu fonksiyon verilen Örneğinİsteğe bağlı olarak normal işlevler olarak işlev gören asyncio coroutines'i nasıl yazabilirim?
:
>>> response = asyncio.get_event_loop().run_until_complete(blah_getter())
:
@asyncio.coroutine
def blah_getter():
return (yield from http_client.get('http://blahblahblah'))
kendi kodlarında herhangi asenkron özellikleri kullanmak için umursamıyor Bir son kullanıcı, hala asyncio ithalat ve bu çalıştırmak zorundadır
Yapabilseydim, blah_getter
'un içinde koroutin olarak adlandırılıp çağrılmadığımı belirler ve buna göre tepki verir.
@asyncio.coroutine
def async_gettter():
return (yield from http_client.get('http://example.com'))
def sync_getter()
return asyncio.get_event_loop().run_until_complete(async_getter())
magically_determine_if_being_yielded_from()
aslında event_loop.is_running()
ama şiddetle senkronizasyonu karıştırmak için tavsiye ve do not: -:
Yani böyle bir şey asenkron eşyordam ve senkron düzenli fonksiyonu
@asyncio.coroutine
def blah_getter():
if magically_determine_if_being_yielded_from():
return (yield from http_client.get('http://blahblahblah'))
else:
el = asyncio.get_event_loop()
return el.run_until_complete(http_client.get('http://blahblahblah'))
İşlevinizi bir "blah_getter" stili işlevinde saran bir dekoratör yapabilirsiniz. –
Ayrıca bkz. Https://stackoverflow.com/q/25299887/320911 –