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

时间:2018-02-06 21:13:38

标签: python multithreading twisted python-multithreading

我正在尝试循环调用每2秒运行一次。有时,我得到了所需的功能,但是我需要等待大约30秒,这对于我的应用来说是不可接受的。

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

我需要一致~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进行此应用程序,这就是为什么我怀疑它挂起这么长时间。我可以利用多线程来解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

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

这些中的任何一个本身足以消除保证的可能性,你可以每两秒运行一次。你可能会接近,但有多接近取决于许多事情。

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

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