在另一个python线程中执行函数(具有响应)的最佳(最简便)方法?

问题描述 投票:0回答:1

我在树莓派上运行了一个小python脚本(已连接以检测是否有邮件传递到我的邮箱),向我发送包含我的邮箱内容快照的电报消息。

到目前为止,这是一个单一的脚本,用于处理GPIO交互(led灯和reed_contacts的threaded_callbacks),picamera和电报消息。但是不再支持我正在使用的电报机器人(telepot)。这就是为什么我希望合并另一个python电报bot实现(python-telegram-bot)并将脚本迁移到python3的原因,因为python2也已经是discontinued

但是这样做时,我认为我需要分割脚本,因为python-telegram-bot不会在调用脚本中非阻塞地运行。在我的旧脚本中,我仍然可以在调用MessageLoop(bot, handler).run_as_thread()之后继续执行主程序(产生一个单独的后台线程以进行更新检查)。但是使用python-telegram-bot之后没有指令评估updater.start_polling() updater.idle(),直到机器人停止。

我认为迁移脚本的最佳选择是将其分为两个相互通信的独立脚本。一个脚本处理与picamera&gpio的交互,另一个脚本通过电报进行用户交互。

例如,通过telegram_script接收请求实际邮箱内容的图片的命令。然后,电报脚本应告诉low_level_script执行capture()函数,并等待该函数的返回/结果(以确保在电报脚本尝试发送图片之前已保存/更新了图片)。

我的问题是,如何在两者之间进行交流?在python中执行low_level_script中的函数并将结果返回给telegram_script的最佳/最简便方法是什么?

python ipc telegram telegram-bot
1个回答
0
投票

我认为这取决于您要如何构建系统。如果您使用multiprocessing在2个进程上运行一个脚本,则可以a pipe or a queue在它们之间进行通信。

如果您有两个非常独立的脚本,也许您可​​以看看使用带有Unix套接字名称的socket

© www.soinside.com 2019 - 2024. All rights reserved.