微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

共享 pyvisa 资源和多处理

如何解决共享 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 举报,一经查实,本站将立刻删除。