第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

__await__ 的精確規(guī)范

__await__ 的精確規(guī)范

ABOUTYOU 2023-08-22 15:01:45
Python語(yǔ)言參考指定object.__await__如下:object.__await__(self)必須返回一個(gè)迭代器。應(yīng)該用于實(shí)現(xiàn)可等待的對(duì)象。例如,asyncio.Future實(shí)現(xiàn)此方法以與await 表達(dá)式兼容。就是這樣。我發(fā)現(xiàn)這個(gè)規(guī)范非常模糊而且不是很具體(諷刺的是)。好的,它應(yīng)該返回一個(gè)迭代器,但是它可以是任意迭代器嗎?很明顯不是:import asyncioclass Spam:? ? def __await__(self):? ? ? ? yield from range(10)async def main():? ? await Spam()asyncio.run(main())RuntimeError: Task got bad yield: 0我假設(shè)asyncio事件循環(huán)期望迭代器生成特定類(lèi)型的對(duì)象。那么它到底應(yīng)該產(chǎn)生什么?(為什么沒(méi)有記錄下來(lái)?)編輯:據(jù)我所知,這在任何地方都沒(méi)有記錄。asyncio但我一直在自己調(diào)查,我認(rèn)為理解期望其協(xié)程產(chǎn)生什么對(duì)象的關(guān)鍵task_step_impl在于_asynciomodule.c.更新:我已經(jīng)向 cpython 存儲(chǔ)庫(kù)發(fā)出了 PR,目的是澄清這一點(diǎn): “澄清”的模糊規(guī)范object.__await__。PR 現(xiàn)已合并,并且應(yīng)該可以在 Python 3.10+ 的文檔中找到。
查看完整描述

2 回答

?
溫溫醬

TA貢獻(xiàn)1752條經(jīng)驗(yàn) 獲得超4個(gè)贊

語(yǔ)言并不關(guān)心您返回哪個(gè)迭代器。該錯(cuò)誤來(lái)自asyncio庫(kù),該庫(kù)對(duì)迭代器必須生成的值類(lèi)型有特定的想法。Asyncio 需要__await__生成 asyncio future(包括其子類(lèi)型,例如任務(wù))或None.?其他庫(kù),如 curio 和 trio,將期望不同類(lèi)型的值??偟膩?lái)說(shuō),異步庫(kù)不會(huì)記錄他們的期望,__await__因?yàn)樗麄冋J(rèn)為這是一個(gè)實(shí)現(xiàn)細(xì)節(jié)。

就 asyncio 而言,除了協(xié)程之外,您還應(yīng)該使用更高級(jí)別的構(gòu)造,例如 future 和任務(wù),并等待它們。很少需要__await__手動(dòng)實(shí)現(xiàn),即使這樣,您也應(yīng)該使用它來(lái)委托另一個(gè)可等待的信號(hào)。編寫(xiě)一個(gè)__await__創(chuàng)建并產(chǎn)生自己的新掛起值的方法需要將其與事件循環(huán)結(jié)合起來(lái)并了解其內(nèi)部結(jié)構(gòu)。

您可以將其視為__await__編寫(xiě)類(lèi)似于 asyncio 的庫(kù)的工具。如果您是此類(lèi)庫(kù)的作者,則當(dāng)前規(guī)范就足夠了,因?yàn)槟梢詮牡髦猩扇魏文矚g的內(nèi)容,只有事件循環(huán)中的代碼才會(huì)觀察生成的值。如果您不處于這個(gè)位置,您可能不需要實(shí)施__await__.


查看完整回答
反對(duì) 回復(fù) 2023-08-22
?
一只萌萌小番薯

TA貢獻(xiàn)1795條經(jīng)驗(yàn) 獲得超7個(gè)贊

任務(wù)只能等待其他任務(wù)/未來(lái)。來(lái)自CPython 源代碼:

? ?/* Check if `result` is FutureObj or TaskObj (and not a subclass) */

? ? /* ... */


? ? /* Check if `result` is None */

? ? /* ... error */


? ? /* Check if `result` is a Future-compatible object */

? ? /* ... */


? ? /* Check if `result` is a generator */

? ? /* ... */


? ? /* The `result` is none of the above */

? ? o = task_set_error_soon(

? ? ? ? task, PyExc_RuntimeError, "Task got bad yield: %R", result);

? ? Py_DECREF(result);

? ? return o;

編輯:如果我理解正確的話,此限制僅施加于任務(wù),并且正常的 future 可以等待從 返回的任何可迭代對(duì)象__await__,盡管重點(diǎn)可能是返回的可迭代對(duì)象產(chǎn)生事件循環(huán),然后最終返回結(jié)果。



查看完整回答
反對(duì) 回復(fù) 2023-08-22
  • 2 回答
  • 0 關(guān)注
  • 1660 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)