Совместное использование ресурсов pyvisa и многопроцессорной обработки

#python #process #multiprocessing #shared-memory #pyvisa

Вопрос:

Я одновременно контролирую, передаю и получаю данные от нескольких инструментов VISA, и я использую многопроцессорную библиотеку python для параллельного запуска нескольких процессов. Я также использую 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, a, 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)