python3: параллельный запуск файла C и скрипта python - PullRequest
0 голосов
/ 27 августа 2018

Я получил отрывок из моего реального скрипта на python, написанного в этом посте. По сути, я хочу, чтобы программа на C и функция Pyserial выполнялись параллельно (программа на C предназначена для управления двигателем, а pySerial - для связи с Arduino). Моя программа будет выполняться на RPi3b с использованием Spyder3 и Rasbipian. Из приведенных ниже источников я уже понял, что если вы хотите, чтобы терминальная программа выполнялась на python, вы должны использовать класс подпроцесса. Если вы хотите выполнить что-то параллельно, пакет Process из многопроцессорной системы выполнит эту работу. Поэтому я смешал их вместе и попытался заархивировать свои цели, используя кодовый код. К несчастью, без успеха. Процесс p1 сразу начинается после того, как процесс p1 вызван [p1 = Process (target = run_c_file ())], и сценарий останавливается, пока файл C не завершится. Кто-нибудь там может помочь? Большое спасибо!

Кстати, я использую python 3.5 ...

Мои источники: https://docs.python.org/3.5/library/multiprocessing.html, https://docs.python.org/3.5/library/subprocess.html?highlight=subprocess

import serial_comm as ssf #My own function. Tested and working when single calling

import subprocess as sub
from multiprocessing import Process

def run_c_file():
  sub.run("./C_File") #Call the C File in the same directory. Immeidatly starts when script is at line 14 -> p1 = Process(target=run_c_file())


def run_pyserial(ser_obj):
  ssf.command(ser_obj,"Command") #Tell the arduino to do something fancy (tested and working)

ser_obj = ssf.connect()
p1 = Process(target=run_c_file())
p2 = Process(target=run_pyserial(ser_obj))

try:
    p1.start()
    p2.start()
    p1.join() #Process one should start here (as far as I understood)
    p2.join() #Process two should start here (as far as I understood)
'''The following part is still in progress'''
except KeyboardInterrupt:
    print("Aborting")

p1.terminate()
p2.terminate()

1 Ответ

0 голосов
/ 27 августа 2018

1001 * попробовать *

p1 = Process(target=run_c_file)
p2 = Process(target=run_pyserial, args=(ser_obj,))

В настоящее время вы вызываете функцию вместо ее передачи.

...