Я разрабатываю проект, в котором я использую около 6 датчиков, подающих в Beaglebone Black, который сохраняет эти данные в 6 разных файлах непрерывно. Через другой вопрос SO (https://stackoverflow.com/a/36634587/2615940) я узнал, что модуль многопроцессорности сделает это для меня, но при запуске моего нового кода я получаю только 1 файл, а не 6. Как я могу изменить этот код, чтобы получить желаемые 6 файлов результатов ?Одновременная запись файлов с использованием многопроцессорной обработки python
* Я отредактировал свой файл, чтобы включить Manager
согласно предложению skrrgwasme ниже, но теперь код запускается и ничего не производит. Нет ошибок, нет файлов. Просто бежит.
Код:
import Queue
import multiprocessing
import time
def emgacq(kill_queue, f_name, adcpin):
with open(f_name, '+') as f:
while True:
try:
val = kill_queue.get(block = False)
if val == STOP:
return
except Queue.Empty:
pass
an_val = ADC.read(adcpin) * 1.8
f.write("{}\t{}\n".format(ms, an_val))
def main():
#Timing stuff
start = time.time()
elapsed_seconds = time.time() - start
ms = elapsed_seconds * 1000
#Multiprcessing settings
pool = multiprocessing.Pool()
m = multiprocessing.Manager()
kill_queue = m.Queue()
#All the arguments we need run thru emgacq()
arg_list = [
(kill_queue, 'HamLeft', 'AIN1'),
(kill_queue, 'HamRight', 'AIN2'),
(kill_queue, 'QuadLeft', 'AIN3'),
(kill_queue, 'QuadRight', 'AIN4'),
(kill_queue, 'GastLeft', 'AIN5'),
(kill_queue, 'GastRight', 'AIN6'),
]
for a in arg_list:
pool.apply_async(emgacq, args=a)
try:
while True:
time.sleep(60)
except KeyboardInterrupt:
for a in arg_list:
kill_queue.put(STOP)
pool.close()
pool.join()
raise f.close()
if __name__ == "__main__":
main()
Учитывая проблемы, вы имели дело с для обоих этих вопросов, я настоятельно рекомендую вам пройти через некоторые основные учебники Python. Похоже, у вас есть путаница в отношении фундаментальных идей, таких как вызовы функций, назначения переменных и передача аргументов. У вас будет намного больше успеха, если вы сможете получить понимание этих основ перед погружением в свой следующий скрипт/программу. – skrrgwasme