#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)