在Python中从同一个Concurrent.futures多次运行函数

在Python中从同一个Concurrent.futures多次运行函数,python,multithreading,multiprocessing,concurrent.futures,continuous,Python,Multithreading,Multiprocessing,Concurrent.futures,Continuous,我在做一个项目,控制马达的速度和加热元件的温度。我必须以10Hz的频率运行电机的采样时间。我用来读取温度传感器的功能持续时间为0.8秒。所以我不能在主回路中使用温度读数。现在,我正尝试使用concurrent.futures模块在主程序的每10个周期(持续时间主程序m=0.1s)中运行一次温度分离功能 这是我的代码: with concurrent.futures.ProcessPoolExecutor() as executor: p1 = executor.submit(GetTem

我在做一个项目,控制马达的速度和加热元件的温度。我必须以10Hz的频率运行电机的采样时间。我用来读取温度传感器的功能持续时间为0.8秒。所以我不能在主回路中使用温度读数。现在,我正尝试使用concurrent.futures模块在主程序的每10个周期(持续时间主程序m=0.1s)中运行一次温度分离功能

这是我的代码:

with concurrent.futures.ProcessPoolExecutor() as executor:
    p1 = executor.submit(GetTemp)  

while(time.time() < t_end):
    #Get Speed of Motor and Temperature
    RealRPMExtruder = round((tach.RPM()/2080),2) 

    if Counter >= 10:
        RealTemp = p1.result()
        p1 = executor.submit(GetTemp)
        counter = 0
    Counter += 1 

    #PID Controllers
    controlExtruder = pidExtruder(RealRPMExtruder)
    controlHeater = pidHeater(RealTemp)

    #Setting Output Values
    PWMExtruder.ChangeDutyCycle(controlExtruder)
    PWMHeater.ChangeDutyCycle(controlHeater)
以concurrent.futures.ProcessPoolExecutor()作为执行器的
:
p1=执行者提交(GetTemp)
while(time.time()=10:
RealTemp=p1.result()
p1=执行者提交(GetTemp)
计数器=0
计数器+=1
#PID控制器
控制挤出机=PID挤出机(RealRPMExtruder)
控制加热器=PID加热器(RealTemp)
#设置输出值
PWMExtruder.ChangeDutyCycle(控制挤出机)
PWM加热器更换周期(控制加热器)

前10个周期运行正常,但第二次尝试启动函数时,程序停止。我需要长时间连续运行,所以使用队列和列表(多处理)将不起作用(我认为)。我需要做什么才能通过某种多重处理多次调用函数。

一旦concurrent.futures的上下文管理器退出,您就不能向执行器提交任何其他内容。您可以将所有内容放在上下文管理器中/之下,但这似乎不正确。我可能会设置一个线程和一个队列,其中线程有一个
while True
循环,该循环获取温度数据并将其放入队列,然后从主线程读取队列。我相信您的实现只在第一次工作,因为您的全局
计数器
从未重置。大小写不匹配,因此您可以指定一个名为
counter
的不同变量,而不是
counter
。如果读取温度传感器时发生阻塞,则可以使用多处理而不是线程,或者直接使用异步IO。