python - 从配置文件定义多处理循环
问题描述
我想读取一组与并发循环并行的传感器,但每个系统都有一组不同的传感器。
我目前有:
with open(inputfilelocation, 'r') as f:
sensorlist = json.load(f)
while True:
for sensor in sensorlist:
H, T = read_sensor(sensor['model'], sensor['address'])
send_data(H, T)
time.sleep(60)
它将它们全部读取,然后睡一分钟。但现在我想指定对每个传感器进行采样的频率。
我可以:
from multiprocessing import Process
def loop_a():
while True:
#Sample and send data
time.sleep(sensor_a_delay)
def loop_b():
while True:
#Sample and send data
time.sleep(sensor_b_delay)
Process(target=loop_a).start()
Process(target=loop_b).start()
但是我至少需要知道我有多少传感器。
有什么方法可以动态定义这些循环吗?
编辑:我试过这个:
def loop_a(sleeptime, string):
while 1:
print(string)
time.sleep(sleeptime)
Process(target=loop_a(5,"foo")).start()
Process(target=loop_a(2,"bar")).start()
但只有“foo”循环运行。
解决方案
好的,我明白克劳斯的意思了。这解决了我的问题:
import time
import json
import threading
with open('sensorlist.json', 'r') as f:
sensorlist = json.load(f)
def sensorloop(model,address,delay):
while True:
H, T = read_sensor(model, address)
send_data(H, T)
time.sleep(delay)
for sensor in sensorlist:
x = threading.Thread(target=sensorloop,
args = (sensor['model'],
sensor['address'],
sensor['delay'])
)
x.start()
推荐阅读
- c# - 如何使用来自 http 请求的数据填充 xamarin 集合视图?
- android - 对处理 git 合并冲突的一群人有什么解决方案吗
- api - 如何在 Delphi 中设置 RestRequest 的 Authorization 标头和 Body 部分?
- android - 如何使用 Proguard 保护 Android Manifest 和字符串 xml
- graphql - 如何将 GraphQL 文件转换为 Postman 集合?
- javascript - 反正有没有使用 JavaScript 查询 SQLAlchemy
- c# - 从 C# 中的 StrokeCollection 渲染图像
- javascript - 如何在firebase的最后一个列表中写入一个数组?
- datetime - 雪花将字符串转换为时间戳
- javascript - MVC 5在用户ID文本框更改时自动填充电子邮件文本框