首页 > 解决方案 > 从配置文件定义多处理循环

问题描述

我想读取一组与并发循环并行的传感器,但每个系统都有一组不同的传感器。

我目前有:

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”循环运行。

标签: pythonpython-multiprocessing

解决方案


好的,我明白克劳斯的意思了。这解决了我的问题:

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()

推荐阅读