Python 阻止执行直到出现条件
我使用的是eventlet,有两个主要进程正在运行。其中一个过程充当生产者,另一个充当消费者。问题是,我不想使用eventlet包中的队列,而是想使用db。 使用queue我可以简单地传递(block=True)作为参数,eventlet将负责阻塞消费者例程的执行,直到生产者将某些内容放入队列。Python 阻止执行直到出现条件,python,multithreading,python-2.7,python-3.x,eventlet,Python,Multithreading,Python 2.7,Python 3.x,Eventlet,我使用的是eventlet,有两个主要进程正在运行。其中一个过程充当生产者,另一个充当消费者。问题是,我不想使用eventlet包中的队列,而是想使用db。 使用queue我可以简单地传递(block=True)作为参数,eventlet将负责阻塞消费者例程的执行,直到生产者将某些内容放入队列。 如果我用db替换队列,我如何有效地实现阻塞逻辑 每N秒查找一次以DB为单位的数据。如果什么也没找到——睡觉 更新:或使用Postgresql侦听/通知机制(如所示)作为背景,您可能希望阅读这篇维基百科文
如果我用db替换队列,我如何有效地实现阻塞逻辑 每N秒查找一次以DB为单位的数据。如果什么也没找到——睡觉
更新:或使用Postgresql侦听/通知机制(如所示)作为背景,您可能希望阅读这篇维基百科文章: 我建议在这两个进程之间使用套接字连接。通过这种方式,您可以轻松地发送一些数据和唤醒信号。请注意,TCP并没有消息的概念(作为一个整体发送和传递的信息),所以您必须实现一个简单的协议来实现这一点。我建议使用tnetstring[1]。另一种方法是使用ZeroMQ,因为它提供消息。Eventlet提供了对这两种方式的出色支持 您可能需要生产者/消费者上的事务作业语义,如中所示:任何数据段要么被某个消费者完全处理,要么失败,需要重复尝试或人工关注。然后,您必须使用某种数据库处理事务。有现成的解决方案:芹菜[2],豆茎[3],柴堆[4]
- [1]
- [2] 我不喜欢它是“任务队列的django”[3],但它完成了任务,如果您需要任务队列,它可能是最好的选择。在这种情况下,django是一个不必要的复杂,不能专注于几个明确的问题,企业式创造就业机会的同义词,因为学习该工具需要花费大量时间和精力
- [3]
- [4]