我正在尝试循环调用每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进行此应用程序,这就是为什么我怀疑它挂起这么长时间。我可以利用多线程来解决这个问题吗?
答案 0 :(得分:2)
Raspberry Pi不是一个实时计算平台。 Python不是一种实时计算语言。 Twisted不是一个实时计算库。
这些中的任何一个本身足以消除保证的可能性,你可以每两秒运行一次。你可能会接近,但有多接近取决于许多事情。
您在问题中包含的程序实际上并不是做。如果这个程序无法每两秒钟可靠地打印两条消息中的每条消息,那么可能是你的Raspberry Pi超载了 - 这是一个具有多任务处理能力的基于Linux的系统。您需要缩减对资源的使用,直到有足够的资源满足此(或其他)程序的需求为止。
目前尚不清楚多线程是否会有所帮助 - 但是,我对此表示怀疑。目前尚不清楚,因为您只包含了程序的过度简化版本。我必须对你的真实程序做了很多猜测,以便考虑提出如何改进它的建议。