python - 将 ProcessPoolExecutor 分配给定义的 cpus 并使用队列进行通信
问题描述
希望你们能帮助我。我进行了很多搜索,但无法找到解决我的问题的方法。
我正在使用 Raspberry 3 B+ 以 2ms 的恒定循环时间与安全 plc 通信。为了满足我的需求,我使用了 Linux 内核的 Preempt-RT 补丁,并使用此链接的精确微秒计时:
使用 isolcpus 和 taskset 命令,我为我的 pyhton 脚本隔离了两个 cpu,以避免操作系统导致更长的循环时间。通过 Raspberry 的 GPIO 以 2 毫秒的周期时间接收和发送一些位是我的第一个任务,现在工作正常。
第二个任务是读取信息并将信息写入 MySQL 数据库,这不是时间关键的(数据库连接已经正常工作)。因此,我想到了使用一个队列,它可以作为我的快速任务和慢速数据库任务之间的连接。
但是,这是我的问题。如果我使用 Concurrent Future ThreadPoolExecutor,我可以很容易地使用队列,但正如预期的那样,到 2 毫秒的时间完全被破坏了。因此,我想到了使用 ProcessPoolExecutor 来同时使用隔离的 cpu 并将两个任务分成一个 cpu。但是有两个问题我无法解决:
我想将快速任务分配给一个 cpu,将慢速任务分配给第二个 cpu(两个 cpu 都是隔离的)。我怎样才能做到这一点?
我需要两个队列(发送、接收)进行通信。我无法找到一种在两个进程之间双向通信的方法。
我还想过使用两个不同的脚本,我可以独立地添加到 CPU 中,但这又是这些脚本之间通信的问题。
有没有办法解决这个问题?顺便说一句,我对 python 完全陌生,希望我能够理解你的想法。;-)
解决方案
如果以后有人遇到同样的问题:我用 ZeroMQ 在两个独立的脚本之间进行通信解决了这个问题。我使用 Publish/Subscribe Messaging Pattern 建立了双向通信。请参阅:https ://learning-0mq-with-pyzmq.readthedocs.io/en/latest/pyzmq/patterns/pubsub.html
推荐阅读
- vue.js - 在Vue中,从孩子>父母>更高父母传递数据的最佳方式是什么?
- flutter - 在 AlertDialog 中获取复选框
- python - 我有这段代码,试图通过捕获视频来运行社会隔离识别,但我有这个错误。你可以帮帮我吗?
- javascript - 从three.js场景中获取像素颜色值
- oauth - 登录后,WebChat OAuth SSO 不会继续对话流
- matlab - 如何使用 ODE45 使用输入 u 进行模拟 - MATLAB
- javascript - Snipcart 购物车未正确更新
- c - For 循环中的 Printf 函数更改我的数组
- r - 混合效应模型中具有重复组特定项的 lmer 公式之间的差异
- android - 需要为 Android 版本自定义 PhoneGap 构建。6 & 7