多进程应用积木块区

  • 多进程使用同一片内存单元,因此可以通过全局变量来共享交换数据。
  • 每个进程都有独立的内存单元,进程间无法通过共享全局变量的方式来交换数据。我们通过队列来进行进程间的数据共享。
  • 我们使用图形化积木来实现多进程编程。进程分为主进程和几个子进程。子进程函数内部的变量和外面主进程的变量不同(即使同名,所以不要同名以做区分)。
  • 主进程默认会创建一个共享队列。
  • 创建子进程时,会把主进程的共享队列传给子进程函数。因此创建的子进程函数需要携带一个变量来接收这个共享队列,然后对其进行读写。
  • 使用多进程进行编程可以更加充分的利用树莓派cpu的运算能力。
  • 有些积木执行起来比较阻塞耗时,如果在多线程中访问这样的积木,会导致所有线程都被阻塞运行,影响功能。此时 使用多进程编程就可以解决这样的问题。

1. 积木功能说明

  • 功能简介:创建一个子进程。子进程函数需要携带一个变量,这个变量表示进程间通信的共享队列。。
  • 参数说明:参数1为子进程的函数名。
  • 返回值:无。

  • 功能简介:本积木仅用于在子进程函数中,向共享队列写入数据。
  • 参数说明
    • 参数1:为共享队列,即子进程函数的入参。
    • 参数2:要写入队列的数据。
  • 返回值:无。

  • 功能简介:本积木仅用于在子进程函数中,从共享队列读取数据。
  • 参数说明
    • 参数1:为共享队列,即子进程函数的入参。
  • 返回值:返回共享队列中的数据。如果共享队列中没有数据,则返回None。

  • 功能简介:本积木仅用于在主进程函数中,从共享队列读取数据。
  • 参数说明:无。
  • 返回值:返回共享队列中的数据。如果共享队列中没有数据,则返回None。

  • 功能简介:本积木仅用于在主进程函数中,向共享队列写入数据。
  • 参数说明
    • 参数1:要写入到共享队列的数据。
  • 返回值:返回共享队列中的数据。如果共享队列中没有数据,则返回None。

2. 注意事项

  • 子进程函数切记一定要携带一个变量,该变量即为进程间用于通信的共享队列。
  • 进程间无法共享全局变量,因此进程内访问变量时,注意不过访问不属于本进程的变量,以免出现难以定位的问题。

3. 积木块应用案例

  • 多进程编程适用于执行有些阻塞耗时的积木,将这样的积木放到单独的子进程函数中进行执行,然后将执行结果写入共享队列。 这样这些阻塞耗时的积木就不会影响其他程序的运行。
  • 使用DHT11模块获取温湿度这个积木会阻塞耗时。
  • 我们分别使用多进程和多线程,通过DHT11获取温度来看下区别。
图1

(图1)使用多进程获取DHT11模块检测的温度

图1

(图2)使用多线程获取DHT11模块检测的温度

  • 图1的调试信息上打印的时间,刚好是每隔1s打印一次。即子进程中执行的阻塞代码没有影响到主进程。
  • 图2的则是每次间隔都超过1s(程序写的是一秒打印一次),即 主线程的代码实际上被子线程里的读取DHT11温湿度的积木给阻塞,没有按照预期运行。
Copyright © 古德微 2023 all right reserved,powered by GDWRobot本课修订时间: 2023-05-23

results matching ""

    No results matching ""