gpt4 book ai didi

python - 使Python多处理。两个函数之间的管道

转载 作者:太空宇宙 更新时间:2023-11-03 19:05:14 25 4
gpt4 key购买 nike

我使用 OneWire 传感器 (ds18b20) 读取温度,并在 PI 算法中使用它来控制 SSR 继电器。我想在两个函数之间使用管道来发送温度并使“Reg”函数尽可能快地运行。如果我不使用管道,Reg 函数将等待温度函数(使用 0.75 秒)并且输出会出错......谁能告诉我如何使用 Pipe 功能??

代码:

import time
import RPi.GPIO as GPIO
import os

GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(22, GPIO.OUT)


def temperatur(self):
while True:

tfile = open("/sys/bus/w1/devices/28-00000433f810/w1_slave")
text = tfile.read()
tfile.close()
secondline = text.split("\n")[1]
temperaturedata = secondline.split(" ")[9]
temp2 = float(temperaturedata[2:])
self.temp = temp2 / 1000
print self.temp


def reg(self):

while True:

ek = self.ref - self.temp
P_del = self.Kp * ek
I_del = ((self.Kp * self.Syklustid) / self.Ti) * ek
Paadrag = P_del + I_del
if Paadrag > 100:
Paadrag = 100
if Paadrag < 0:
Paadrag = 0
print "Paadrag: ", Paadrag, " Temperatur: ", self.temp
duty = Paadrag / 100.0
on_time = self.Syklustid * (duty)
off_time = self.Syklustid * (1.0-duty)
print "On_time: ", on_time, " Off_time: ", off_time
GPIO.output(22, GPIO.HIGH)
time.sleep(on_time)
GPIO.output(22, GPIO.LOW)
time.sleep(off_time

if __name__ == '__main__':

最佳答案

这直接来自 python 文档: http://docs.python.org/2/library/multiprocessing.html

from multiprocessing import Process, Pipe

def f(conn):
conn.send([42, None, 'hello'])
conn.close()

if __name__ == '__main__':
parent_conn, child_conn = Pipe()
p = Process(target=f, args=(child_conn,))
p.start()
print parent_conn.recv() # prints "[42, None, 'hello']"
p.join()

使用共享状态我得到了更好的结果。特别是对于像温度这样的简单数据(我假设是一个数字 - 不是复杂的自定义对象或其他什么)这是一个小示例(您将再次在 python 文档中找到更多内容)

#import stuff
from multiprocessing import Process, Manager

# Create a shared dictionary of paremeters for both processes to use
manager = Manager()
global_props = manager.dict()
# SuperImportant - initialise all parameters first!!
global_props.update({'temp': 21.3})

def functionOne(global_props):
# Do some stuff read temperature
global_props['temp'] = newVal

def functionTwo(global_props):
temp = global_props['temp']
# Do some stuff with the new value

# assign listeners to the two processes, passing in the properties dictionary

handlerOne = functionOne # This can also be a class in which case it calls __init__()
handlerTwo = functionTwo
processOne = Process(target=handlerOne,
args=(global_props))
processTwo = Process(target=handlerTwo,
args=(global_props))

# Start the processes running...
processOne.start()
processTwo.start()
processOne.join()
processTwo.join()

关于python - 使Python多处理。两个函数之间的管道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14922089/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com