阻止执行直到条件

时间:2014-10-08 07:23:10

标签: python multithreading python-2.7 python-3.x eventlet

我正在使用eventlet并运行两个主进程。其中一个过程充当生产者,另一个过程充当消费者。问题是,我不想使用eventlet包中的队列,而是使用db。 使用队列我可以简单地传递(block = True)作为参数和eventlet将负责消费者例程的bloking执行,直到生产者将某些东西放入队列中。 如果我用db替换队列,我该如何有效地实现阻塞逻辑。

2 个答案:

答案 0 :(得分:2)

有关背景知识,您可能希望阅读此维基百科文章:http://en.wikipedia.org/wiki/Inter-process_communication

我建议在这两个进程之间使用套接字连接。您可以通过这种方式轻松发送一些数据和唤醒信号。请注意,TCP没有消息概念(如在作为整体发送和传递的信息中),因此您必须实现一个简单的协议来实现这一点。我推荐tnetstring [1]。其他方法是使用ZeroMQ,因为它提供消息。 Eventlet为这两种方式提供了出色的支持。

您可能需要生产者/消费者的事务作业语义,如下所示:任何数据都由某个消费者完全处理或失败,需要重复尝试或人为关注。那么你真的必须使用某种数据库与事务。有现成的解决方案:芹菜[2],豆茎[3],pyres [4]。

答案 1 :(得分:0)

每隔N秒在DB中查找数据。如果找不到任何东西 - 睡觉。

更新:或使用Postgresql LISTEN / NOTIFY机制,如http://initd.org/psycopg/articles/2010/12/01/postgresql-notifications-psycopg2-eventlet/

所示