超时参数添加到Python的Queue.join()

我希望能够加入()队列类,但timeouting一段时间后,如果通话还没有回来呢。 什么是做到这一点的最好方法是什么? 是否有可能通过继承队列\使用元类来做到这一点?

--------------解决方案-------------

子类Queue可能是最好的办法。 这样的事情应该工作(未经测试):

def join_with_timeout(self, timeout):
self.all_tasks_done.acquire()
try:
endtime = time() + timeout
while self.unfinished_tasks:
remaining = endtime - time()
if remaining <= 0.0:
raise NotFinished
self.all_tasks_done.wait(remaining)
finally:
self.all_tasks_done.release()

join()方法是所有关于等待做的所有任务。 如果你不小心的任务是否已实际完成,你可以定期轮询未完成的任务数:

stop = time() + timeout
while q.unfinished_tasks and time() < stop:
sleep(1)

此循环将存在或者当任务完成时或当在超时周期已经过去。

雷蒙德

首先,你应该确保所有在队列中退出工作线程task_done()

要实现超时功能与Queue ,你可以用队列的代码在一个线程,并添加一个超时使用此主题Thread.join([timeout])

未经测试的例子来说明一下,我建议

def worker():
while True:
item = q.get()
do_work(item)
q.task_done()

def queuefunc():
q = Queue()
for i in range(num_worker_threads):
t = Thread(target=worker)
t.setDaemon(True)
t.start()

for item in source():
q.put(item)

q.join() # block until all tasks are done

t = Thread(target=queuefunc)
t.start()
t.join(100) # timeout applies here

分类:蟒蛇 时间:2012-01-01 人气:0
分享到:

相关文章

  • 蟒蛇队列保存到文件 2012-01-20

    我使用了Python队列cclass管理被多个工作线程之间共享的任务列表. 实际的代码是humungous和我仍然使得其完全没有缺陷的过程. 每隔一段时间,工作线程会崩溃,我必须重新启动整个程序. 在这个过程中我失去了所有已排队的任务. 有没有办法到队列保存到一个文件,这样每当我重新启动该进程在任务列表是从文件中预装? 在首先想到的似乎是我得到或将任务到队列中,我应该同时读取和写入文件. 然而,这不给我queue.task_done()的功能,并且可能不是最优化的解决方案. 任何想法将不胜感激.

  • 蟒蛇XMLRPC超时错误 2013-03-07

    我使用的XMLPRC联系本地服务器. 在客户端,有时以下套接字超时错误和发生,它不是一个一致的错误. 为什么会发生? 有什么能为套接字超时的原因是什么? <class 'socket.timeout'>: timed out args = ('timed out',) errno = None filename = None message = 'timed out' strerror = None 在服务器端回溯是如下 Exception happened during processing

  • 蟒蛇队列的get(),task_done()问题 2012-02-23

    我的消费队列的一面: m = queue.get() queue.task_done() <rest of the program> 问题: 确实task_done()有效地弹出米从队列并释放任何锁具消费者对队列? 我需要的程序的其余部分中使用行动. 它是安全的,或者我需要复制它,我叫task_done()之前? 或者,为m task_done后用()? 要开心 --------------解决方案------------- 不queue.get()弹出离开队列项. 当你这样做,你可以做任何你

  • 如何在的DeepCopy蟒蛇队列 2012-04-18

    嗨如何的DeepCopy在python队列? 谢谢 --------------解决方案------------- 的queue在Python模块用于线程之间的同步共享数据. 它不打算作为一个数据结构,并且它不支持复制(甚至不浅拷贝). (它可以通过构建多深度拷的队列.get和.put ,但原来的队列将被销毁.) 如果你想有一个队列(或堆栈)的数据结构,使用collections.deque 如果你想有一个优先级队列,使用heapq模块. 双端队列支持deepcopy的意思. heapq通过列表

  • 蟒蛇队列并发流程管理 2015-03-08

    用例是如下:我有一个运行一系列非蟒蛇的可执行文件,以减少(脉冲星)数据的脚本. 我现在使用subprocess.Popen(...,壳=真),然后子进程的通信功能来捕获标准输出和标准错误从非蟒蛇可执行文件和捕获的输出我登录使用Python的日志记录模块. 问题在于:可能的8只是一个芯现在习惯的大部分时间. 我想派生出每个多个进程做并行数据集的一部分,我想跟踪PROGRES的. 这是一个脚本/程序从低frequencey射电望远镜(LOFAR)分析数据. 该易于安装/管理和测试越好. 我正要建立管

  • WCF + MSMQ 4:谁将从重试队列中移动的消息返回给应用程序队列? 2013-11-19

    这是一个简单的问题,但我没能找到答案. 假设我的消息被放置在重试队列(谁创造的重试队列?它是一个WCF还是MSMQ服务?) 5分钟后(这是我的重试延迟)的消息回来给应用程序的队列. 问:谁从试队列超时后,将邮件移动到应用程序队列? 奖金的问题:延迟是如何被追踪? 确实的消息得到了"感动"时间戳和"重试"时间戳? --------------解决方案------------- WCF与MSMQ 4.0也提供了自动重试和带毒邮件处理虽然休的答案是旧版本的MSMQ是正确的

  • 使用轮询套接字响应超时 2014-02-08

    我有一个现有的多线程C ++程序,它使用套接字池用于读取和写入. 发件人线程发送使用下一个可用插座HTTP请求. 接收器therad民调插槽(使用轮询()方法)的游泳池和读取HTTP响应. 如何接收线程可以从池中的插座检测可能HTTP响应超时? --------------解决方案------------- 简单的例子把我的头顶部: 当您发送一个请求,创建一个包含FD,你需要任何逻辑连接信息,和绝对时间上,你会考虑的超时对象 保持这些对象按时间排序的一个优先级队列,所以最快到到期总是在前面(这退

  • 如何检测与BindIoCompletionCallback的WinSock TCP超时 2014-11-11

    我建立使用BindIoCompletionCallback一个Visual C ++的WinSock TCP服务器,它工作正常接收和发送数据,但我找不到检测超时的好方法:setsockopt的/ SO_RCVTIMEO / SO_SNDTIMEO对非阻塞插座没有影响,如果对等不发送任何数据,则CompletionRoutine根本没有被调用. 我正在考虑使用RegisterWaitForSingleObject以重叠的hEvent领域,可能的工作,但随后我在仍然使用IOCP不需要Completi

  • 创建一个临时FIFO(命名管道)在Python? 2012-01-18

    如何创建一个临时FIFO(命名管道)在Python? 这应该工作: import tempfile temp_file_name = mktemp() os.mkfifo(temp_file_name) open(temp_file_name, os.O_WRONLY) # ... some process, somewhere, will read it ... 不过,我因为在Python文档11.6和潜在的去除大警告犹豫不决,因为它是不推荐使用. 编辑:这是值得注意的,我试过tempfile

  • 什么是程序设计竞赛的最佳单源最短路径算法? 2012-03-17

    我正在从弗吉尼亚习题集此图的问题. 这是一个单源最短路径问题,没有负面的边权重. 从我收集的,该算法与最佳的大O运行时间这样的问题是Dijkstra算法与斐波那契堆作为优先级队列,但实际而言二元堆更容易实现和工作得很好了. 然而,这似乎,即使是二叉堆需要相当一段时间才能推出,并在比赛的时间是有限的. 我知道,STL提供了一些堆算法和优先级队列,但他们似乎并没有提供一个下降键功能,Dijkstra的需求. 还是我错了吗? 似乎另一种可能性是简单地不使用Dijkstra的. 本次论坛主题都有人声称他

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.281 (s). 10 q(s)