事件期间ZMQ上下文可以切换吗?

时间:2020-09-09 22:26:30

标签: python asynchronous zeromq

我正在尝试使用2个异步函数创建一个Python生产者和使用者。其中一个函数是从服务器(生产者)获取数据的回调,另一个是每N秒执行一次(用户)执行的定时回调。我正在尝试为此使用ZMQ / Reactor,因为我想避免计时器线程的开销,而仅使用事件循环。 ZMQ / Reactor事件循环是否按到达顺序执行每个事件,还是有可能随时将使用者功能上下文切换到生产者功能?

简化示例:
主要问题是我无法弹出列表中的所有项目并自动清除

queue = []
def producer():
   # gets data from server
   queue.append(single_record)

def consumer():
   records = list(queue)
   # inserts records into db
   queue.clear()

1 个答案:

答案 0 :(得分:1)

Q “事件期间ZMQ上下文可以切换吗?”

好吧,让我们从零禅宗的祖先开始-彼得·辛琴斯(Martin SUSTRIK)和马丁·苏斯特里克(Martin SUSTRIK)的体系结构从来没有向您保证过任何收到消息的保证,获得全部保证的保证就越少的“顺序”越少。

Zen-of-Zero中只有一项保修:如果我们确实发出.recv消息,则肯定是原始消息的二进制完全相同的副本,该副本被分发为通过ZeroMQ发送。

ZeroMQ Context()实例是一个独立的异步MQ引擎,这一事实无济于事,并且知道Python在Py2.x中每隔几百条伪指令都会切换其内部GIL锁所有权。还是Py3。+中的每5 [ms]都不能帮助您明确表示需要获得任何此类保证,对吗?

您还需要其他一些附加机制,这些机制可以弥补Python的空白,并在零禅的领土上架起缺失的保证。

相关问题