速率限制队列

sloq的Python项目详细描述


一种较慢的队列实现,保证任务以最大速率处理。SlowQueue的目标是直接与队列API进行比较,以便可以将其作为另一个实现(与lifoqueue和priorityqueue一样)放入,但当前(不必如此)如果尝试将block=Falsetimeout>;0传递到get方法,则会引发额外的值错误。一些砰击是可能的,并且可以使用tokenbucket或slowqueue实例上的max\slam关键字参数进行控制。

有关更多信息,请参见以下示例(取自demo_sloq.py)或单元测试:

fromargparseimportArgumentParserfromthreadingimportThread,current_threadimportloggingimporttimefromsloqimportSlowQueuedefmain(args=None):prog=ArgumentParser()prog.add_argument("-n",type=int,default=10,metavar="TASK_COUNT",help="The number of tasks")prog.add_argument("-t",type=float,default=1,metavar="TASK_INTERVAL",help="The tick: seconds between tasks being released")prog.add_argument("-w",type=int,default=3,metavar="WORKER_COUNT",help="Number of workers")prog.add_argument("-d",type=float,default=0,metavar="TASK_DURATION",help="Duration of a single task")prog.add_argument("-s",type=float,default=0,metavar="MAX_SLAM",help="The maximum amount of slam to allow")args=prog.parse_args(args)logger=logging.getLogger(__name__)logger.setLevel(logging.INFO)logger.addHandler(logging.StreamHandler())test_queue(logger,args.t,args.n,args.d,args.w,args.s)deftest_queue(logger,tick=1,tasks=10,task_duration=0,worker_count=3,slam=0):start_time=time.time()sloq=SlowQueue(release_tick=tick,max_slam=slam)# Begin the workersforwinxrange(0,worker_count):Thread(target=test_worker,args=(logger,start_time,sloq)).start()# Populate the queuefortaskinxrange(0,tasks):sloq.put((task,task_duration))forwinxrange(0,worker_count):sloq.put((None,None))sloq.join()deftest_worker(logger,start_time,queue):whileTrue:task,sleep=queue.get()iftaskisNone:logger.info("%s, Done"%current_thread().name)queue.task_done()returnelse:logger.info("%s, Elapsed time: %0.2f, Task: %r",current_thread().name,time.time()-start_time,task)ifsleep:time.sleep(sleep)queue.task_done()if__name__=="__main__":main()

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何在jetty请求日志中添加milliscond字段?   java在使用Scanner类从文件读取信息时遇到问题   为什么。类不适用于泛型类型?   SQLite插入上的java空指针异常   java能告诉我们Guava缓存是在禁用统计数据的情况下构建的吗?   java在应用程序中使用常量   java无法使用AutoIT和Selenium Webdriver在所需位置/文件夹保存图像   java如何在jtable中更新jprogress栏   java是比较给定日期和当前日期(在给定时区中没有时间段)的最佳方法   安卓代码中的java错误   java无法访问实体类中的字段   java如何在tomcat中处理三个JDBC连接池?   java无法使用Spring Security保护AngularJS页面   如何在没有TCP/IP协议栈的情况下用Java发送以太帧