带有最小间隔时间的队列读取实现 —— 最小等待时间的队列 —— Python编程(续)

接前文:

带有最小间隔时间的队列读取实现 —— 最小等待时间的队列 —— Python编程

 

 

 

由于上次的设计多少有些简单,这里对此丰富一下。

 

 

=====================================

 

 

 

根据前文的内容进行了修改和丰富,得到下面设计:

 (需要说明的是,根据模拟环境的测试前后这两个版本的性能,即吞吐量基本一致,所以并没有哪个更优一说,这里只是提供零一种思路)

 

from multiprocessing import Process, Queue
import threading
from threading import Thread
import numpy as np
import time
import queue


q = Queue(maxsize=128)


def produce(q):
    while True:
        q.put( np.random.rand(128, 128) )
        time.sleep(np.random.randint(100)/1000)


for _ in range(10):
    p = Process(target=produce, args=(q, ))
    p.start()


data = []
def consumer(data):
    l = len(data)
    print("长度:", len(data))
    data.clear()
    time.sleep(0.1)
    return l

"""
while True:
    print(q.qsize())
"""

s = 0
# while True:
b_t = time.time()


interval = 0.1
for i in range(36):
    for _ in range(10):  # 超参数, 轮询次数
        l = q.qsize()
        if l >= 32:      # batch_size
            # l = min(l, 64)
            l = max(l, 64)
            break
        else:
            time.sleep(interval/10)

    for _ in range(l):
        data.append(q.get())


    # print("time: ", i)
    s += consumer(data)


b = time.time() - b_t
print(b)
print(s)
print("吞吐率", s/b)

 

 

 

 

 

=====================================

 

posted on 2023-11-02 08:46  Angry_Panda  阅读(34)  评论(0)    收藏  举报

导航