子进程VS函数VS / etc / profile

时间:2017-01-20 05:29:19

标签: python parallel-processing

我制作了3个python代码。我正在使用Raspberry Pi

  • 代码1 - 按下按钮
  • 打印条形码
  • 代码2 - 将条形码发送到服务器
  • 代码3 - 在后台运行以在网络出现故障时记录数据,并在互联网出现后重新发送数据。

注意:所有这些代码都在while(True)循环

中运行

现在,我必须将所有这三个程序相互并行运行。我已经阅读了大约3个选项

SubProcess - 使用subprocess()将python代码导入一个代码并运行它们

使用/ etc / profile - 我放在sudo nano /etc/profile

末尾的以下行
sudo python3 (link to code1) & sudo python3 (link to code3)

这样运行得很好......虽然我偶尔会陷入一个无限循环中并且对此感觉不舒服。

定义函数 - 我将两个程序定义为3个代码中最大的代码,并以非常快的速度运行。

现在所有这3个确实给我输出的信息几乎没有错误。但我想知道......这是最好的,最有效的方式来并行运行多个程序

1 个答案:

答案 0 :(得分:0)

选项1是最普遍的。这就是这种类型的程序的工作方式 - 它们可以在不同的进程中工作,甚至可以在不同的机器或容器上工作,并通过网络/ ipc API相互协作。

选项2几乎相同,但没有意义。 /etc/profile is invoked only for login shells because that is its specific purpose.您需要一个选项才能在其他用户下启动该程序。如果您打算重新启动程序,为什么不首次使用相同的机制启动它?

选项3.如果您在一个过程中以不同的功能运行应用程序 - 太麻烦了。你有时间问题 - 哪个功能正在运行。您可以使用多线程,但它可能对您的用例来说太复杂了。虽然第二个应用程序只是提交网络请求,但这是一个非常可行的解决方案。代码2和3将是相同的应用程序。在第二个线程中运行它 - 它将数据收集到本地sqlite数据库,并发送未标记为已提交的消息(同样的想法适用于选项1)。