【问题标题】:Can ZMQ context switch during an event?ZMQ 上下文可以在事件期间切换吗?
【发布时间】:2022-02-18 03:37:33
【问题描述】:

我正在尝试使用 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()

【问题讨论】:

    标签: python asynchronous zeromq


    【解决方案1】:

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

    好吧,
    让我们从零之禅之父开始 - Pieter HINTJENS 和 Martin SUSTRIK 的建筑宣传从未向您承诺过任何此类接收消息的保证,获得所有信息的保证越少他们越不“有序”。

    在 Zen-of-Zero 中只有一个保证:如果我们确实发送了.recv 一条消息,那么它肯定是原始消息的二进制相同副本,被发送过来零MQ。

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

    您需要一些其他附加机制,以填补 Python 的空白,并在 Zen-of-Zero 领域弥补缺失的保证。

    【讨论】:

    • 我以为你在事件循环上安排回调并且它们按顺序执行?我也在使用带有 ZMQ 的 Twisted Reactor
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-09
    • 2013-07-15
    • 1970-01-01
    • 2021-06-05
    • 2013-09-02
    • 2013-04-15
    相关资源
    最近更新 更多