日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
創(chuàng)新互聯(lián)Tornado教程:Tornado協(xié)程隊(duì)列

協(xié)程的異步隊(duì)列。 這些類與標(biāo)準(zhǔn)庫的 ?asyncio包中提供的類非常相似。

在汝陽等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站制作、網(wǎng)站建設(shè) 網(wǎng)站設(shè)計(jì)制作按需策劃設(shè)計(jì),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),營銷型網(wǎng)站,外貿(mào)網(wǎng)站建設(shè),汝陽網(wǎng)站建設(shè)費(fèi)用合理。

注意:

與標(biāo)準(zhǔn)庫的 ?queue模塊不同,這里定義的類不是線程安全的。 要從另一個(gè)線程使用這些隊(duì)列,請(qǐng)?jiān)谡{(diào)用任何隊(duì)列方法之前使用 ?IOLoop.add_callback? 將控制權(quán)轉(zhuǎn)移到 ?IOLoop線程。

隊(duì)列

class tornado.queues.Queue(maxsize: int = 0)

協(xié)調(diào)生產(chǎn)者和消費(fèi)者協(xié)程。

如果 ?maxsize為 0(默認(rèn)值),則隊(duì)列大小是無限的。

from tornado import gen
from tornado.ioloop import IOLoop
from tornado.queues import Queue

q = Queue(maxsize=2)

async def consumer():
    async for item in q:
        try:
            print('Doing work on %s' % item)
            await gen.sleep(0.01)
        finally:
            q.task_done()

async def producer():
    for item in range(5):
        await q.put(item)
        print('Put %s' % item)

async def main():
    # Start consumer without waiting (since it never finishes).
    IOLoop.current().spawn_callback(consumer)
    await producer()     # Wait for producer to put all tasks.
    await q.join()       # Wait for consumer to finish all tasks.
    print('Done')

IOLoop.current().run_sync(main)

結(jié)果如下:

Put 0
Put 1
Doing work on 0
Put 2
Doing work on 1
Put 3
Doing work on 2
Put 4
Doing work on 3
Doing work on 4
Done

在沒有原生協(xié)程的 python 版本中(3.5 之前),?consumer()? 可以寫成:

@gen.coroutine
def consumer():
    while True:
        item = yield q.get()
        try:
            print('Doing work on %s' % item)
            yield gen.sleep(0.01)
        finally:
            q.task_done()

maxsize

隊(duì)列中允許的項(xiàng)目數(shù)。

qsize() → int

隊(duì)列中的項(xiàng)目數(shù)。

put(item: _T, timeout: Union[float, datetime.timedelta, None] = None) → Future[None]

將一個(gè)項(xiàng)目放入隊(duì)列中,也許等到有空間。

返回一個(gè) ?Future?,它會(huì)在超時(shí)后引發(fā) ?tornado.util.TimeoutError?。

?timeout可以是一個(gè)表示時(shí)間的數(shù)字(與 ?tornado.ioloop.IOLoop.time? 的比例相同,通常是 ?time.time?),或者是相對(duì)于當(dāng)前時(shí)間的截止日期的 ?datetime.timedelta? 對(duì)象。

put_nowait(item: _T) → None

將一個(gè)項(xiàng)目放入隊(duì)列而不阻塞。

如果沒有立即可用的空閑槽,則提高 ?QueueFull?。

get(timeout: Union[float, datetime.timedelta, None] = None) → Awaitable[_T]

從隊(duì)列中移除并返回一個(gè)項(xiàng)目。

返回一個(gè)等待項(xiàng)目,一旦項(xiàng)目可用就解決,或在超時(shí)后引發(fā) ?tornado.util.TimeoutError?。

?timeout可以是一個(gè)表示時(shí)間的數(shù)字(與 ?tornado.ioloop.IOLoop.time? 的比例相同,通常是?time.time?),或者是相對(duì)于當(dāng)前時(shí)間的截止日期的 ?datetime.timedelta? 對(duì)象。

注意:

該方法的 ?timeout參數(shù)與標(biāo)準(zhǔn)庫的 ?queue.Queue.get? 不同。 該方法將數(shù)值解釋為相對(duì)超時(shí); 這將它們解釋為絕對(duì)截止日期,并且需要 ?timedelta對(duì)象用于相對(duì)超時(shí)(與 Tornado 中的其他超時(shí)一致)。

get_nowait() → _T

從隊(duì)列中移除并返回一個(gè)項(xiàng)目而不阻塞。

如果一個(gè)項(xiàng)目立即可用,則返回一個(gè)項(xiàng)目,否則引發(fā) ?QueueEmpty?。

task_done() → None

指示以前排隊(duì)的任務(wù)已完成。

由隊(duì)列消費(fèi)者使用。 對(duì)用于獲取任務(wù)的每個(gè) ?get ?,對(duì) ?task_done的后續(xù)調(diào)用會(huì)告訴隊(duì)列該任務(wù)的處理已完成。

如果一個(gè)連接被阻塞,它會(huì)在所有項(xiàng)目都被處理后恢復(fù); 也就是說,當(dāng)每個(gè) ?put?都與 ?task_done?匹配時(shí)。

如果調(diào)用次數(shù)多于 ?put?,則引發(fā) ?ValueError?。

join(timeout: Union[float, datetime.timedelta, None] = None) → Awaitable[None]

阻塞直到隊(duì)列中的所有項(xiàng)目都處理完畢。

返回一個(gè) ?awaitable?,它在超時(shí)后引發(fā) ?tornado.util.TimeoutError?。

優(yōu)先隊(duì)列

class tornado.queues.PriorityQueue(maxsize: int = 0)

按優(yōu)先級(jí)順序檢索條目的隊(duì)列,最低優(yōu)先。

條目通常是元組,如(?priority number?, ?data?)。

from tornado.queues import PriorityQueue

q = PriorityQueue()
q.put((1, 'medium-priority item'))
q.put((0, 'high-priority item'))
q.put((10, 'low-priority item'))

print(q.get_nowait())
print(q.get_nowait())
print(q.get_nowait())

結(jié)果如下:

(0, 'high-priority item')
(1, 'medium-priority item')
(10, 'low-priority item')

隊(duì)列

class tornado.queues.LifoQueue(maxsize: int = 0)

隊(duì)列首先檢索最近放置的項(xiàng)目。

from tornado.queues import LifoQueue

q = LifoQueue()
q.put(3)
q.put(2)
q.put(1)

print(q.get_nowait())
print(q.get_nowait())
print(q.get_nowait())

結(jié)果如下:

1
2
3

隊(duì)列空

exception tornado.queues.QueueEmpty

當(dāng)隊(duì)列沒有項(xiàng)目時(shí)由 ?Queue.get_nowait? 引發(fā)。

隊(duì)列滿

exception tornado.queues.QueueFull

當(dāng)隊(duì)列達(dá)到最大大小時(shí)由 ?Queue.put_nowait? 引發(fā)。


文章題目:創(chuàng)新互聯(lián)Tornado教程:Tornado協(xié)程隊(duì)列
網(wǎng)站地址:http://www.dlmjj.cn/article/copcsei.html