是否可以在 Python 中强制进行 2 秒循环回调?

Is it possible to force a 2 second looping callback in Python?

我正在尝试每 2 秒循环调用一次 运行。有时,我可以获得所需的功能,但有时我必须等待 ~30 秒,这对于我的应用程序来说是不可接受的。

我查看了此 SO post 并发现默认情况下循环调用可能不可靠。有办法解决这个问题吗?

我的 usage/reason 因为需要一致的 ~2 秒:

我调用的函数扫描图像(使用 CV2)以获取美元价值,如果它找到该金额,它会向我的销售点客户端发送一条 websocket 消息。我不能让顾客等 30 秒让 POS 终端要求他们付款。

我的源代码很长,目前还没有很好的评论,所以这里是我正在做的一个简短示例:

#scan the image for sales every 2 seconds
def scanForSale():
    print ("Now Scanning for sale requests")

#retrieve a new image every 2 seconds
def getImagePreview():
    print ("Loading Image From Capture Card")

lc = LoopingCall(scanForSale)
lc.start(2)

lc2 = LoopingCall(getImagePreview)
lc2.start(2)

reactor.run()

我正在为这个应用程序使用 Raspberry Pi 3,这就是我怀疑它挂起这么久的原因。我可以利用多线程来解决这个问题吗?

Raspberry Pi 不是实时计算平台。 Python 不是实时计算语言。 Twisted 不是实时计算库。

这些中的任何一个本身都足以消除保证你可以每两秒运行任何一次的可能性。您可能会接近,但接近程度取决于很多因素。

您在问题中包含的程序实际上 不多。如果这个程序不能每两秒可靠地打印这两条消息中的每一条,那么你可能已经超载了你的 Raspberry Pi - 一个具有多任务处理能力的基于 Linux 的系统。您需要减少对其资源的使用,直到有足够的可用资源来满足此(或其他)程序的需求。

尚不清楚多线程是否有帮助 - 但是,我对此表示怀疑。不清楚,因为您只包含了程序的过度简化版本。我将不得不对你的真实程序做了很多疯狂的猜测,以便考虑就如何改进它提出任何建议。