共享 pyvisa 资源和多处理

问题描述

我同时控制、通信和从多个 VISA 仪器获取数据,并且我正在使用 python Multiprocessing 库并行运行多个进程。我也在使用 pyVISA 进行仪器通信。下面的代码有效,但我必须在“主程序”中的每次迭代中连接和断开我的仪器。这是总代码的简化版;因此,我想找到一种不需要我从头开始重新编写脚本的解决方案。

我的目标是一次连接和断开我的仪器。我想在 for 循环开始之前连接并在它结束后断开连接。我尝试使用多处理文档中描述的管道和值,但没有成功。

你会提供一些建议让我尝试吗?如果我可以分享更多信息,请告诉我。感谢您的帮助!

from multiprocessing import Process,Pipe
import pyvisa as pyvisa

def get_laser_power(p_input):
    rm = pyvisa.ResourceManager()    
    power_meter_address = 'USB0::0x1313::0x8078::P0030760::INSTR'
    power_meter = rm.open_resource(power_meter_address)    
    reading = power_meter.query('READ?\n')
    p_input.send(reading)
    power_meter.close()

def get_sum(p_input,a,b):
    add = a + b
    p_input.send(add)


### Main Program ###

if __name__ == '__main__':
    a = 5    
    power_array = []
    add_array = []
    for i in range(5):
        pipe1_output,pipe1_input = Pipe()
        pipe2_output,pipe2_input = Pipe()
        p1 = Process(target=get_laser_power,args=(pipe1_input,))
        p2 = Process(target=get_sum,args=(pipe2_input,i))        
        p1.start()
        p2.start()        
        power = pipe1_output.recv()
        add = pipe2_output.recv()
        p1.join()
        p2.join()        
        power_array.append(power)
        add_array.append(add)        
    print(power_array)
    print(add_array)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)