可以参考廖雪峰的博客 https://www.liaoxuefeng.com/wiki/1016959663602400/1017628290184064
我自己在树莓派开发的例子
from django.shortcuts import HttpResponse
from common.pygpio import led, sound
from multiprocessing import Process
# Create your views here.
def robot(request):
"""ionum: int gpio的引脚,17表示红灯,27表示绿灯,22表示黄灯
freq: int 1秒之内的闪烁次数
sec: int 持续闪烁的时间
分级 触发动作 标志位 备注
1级 红灯快速闪烁+音频告警 1 每秒闪烁8次,持续13秒
2级 红灯中速闪烁 2 每秒闪烁3次,持续5秒
3级 红灯慢速闪烁 3 每秒闪烁1次,持续3秒
4级 黄灯闪烁 4 每秒闪烁1次,持续3秒
5级 绿灯闪烁 5 每秒闪烁1次,持续3秒
"""
alarm_level = int(request.GET.get('alarm_level'))
if alarm_level == 1:
p1 = Process(target=sound, args=("warn_sound_001", ))
p2 = Process(target=led, args=(17, 8, 13, ))
p1.start()
p2.start()
p1.join()
p2.join()
elif alarm_level == 2:
led(17, 3, 5)
elif alarm_level == 3:
led(17, 1, 3)
elif alarm_level == 4:
led(22, 1, 3)
elif alarm_level == 5:
led(27, 1, 3)
return HttpResponse("alarm successfully!")
join()方法可以等待子进程结束后再继续往下运行,通常用于进程间的同步。
当alarm_level 为1的时候我分出两个子进程p1,p2 一个跑声音,一个跑led灯闪烁
- 起多个进程干同一件事情,共同完成一个列表
from multiprocessing import Process, Queue, Lock
def work(x, q):
ret_list = []
s = 0
for i in range(x):
s = i + s
ret_list.append(s)
q.put(ret_list)
if __name__ == "__main__":
q = Queue()
p1 = Process(target=work, args=(3, q))
p2 = Process(target=work, args=(4, q))
p3 = Process(target=work, args=(5, q))
p1.start()
p2.start()
p3.start()
p1.join()
p2.join()
p3.join()
print(q.get())
# 执行结果
[0, 1, 3]
Process finished with exit code 0
如果要启动大量的子进程,可以用进程池Pool的方式批量创建子进程