Запустите один код Python в фоновом режиме из другого кода Python - PullRequest
0 голосов
/ 09 марта 2019

У меня есть два файла Python, файл 1 и файл 2, которые делают две разные вещи.Я хочу запустить их вместе.Я использую VS2017

Псевдокод для файла 1:

Class A:
   foo1():
    .
    .
   foo2();
    if variable<30;
        #do this
    else;
      subprocess.Popen('py file2.py')

    #rest of the code for foo2()

if __name__ == "__main__":   
  A.foo2();

В настоящее время, когда я использую этот формат, подпроцесс запускает файл 2 и запускает его, но остальной коддля foo2 () после того, как условие if-else выполняется только после завершения процесса (еще одно условие, которое я настроил внутри файла 2).

Я пытаюсь сделать так, чтобы файл 2 запускался в фоновом режиме после выполнения условия if-else и выдавал выходные данные в командном окне, а также запускал оставшуюся часть файла.1. Не приостанавливать запуск файла 1 до тех пор, пока файл2 не будет завершен.Если нет в подпроцессе, есть другой способ запустить оба файла одновременно, но контролировать вывод файла 2, передав значение «переменная».Я пытаюсь найти правильное решение.

Я новичок в Python.

РЕДАКТИРОВАТЬ 1:

Я использовал команду:

process = subprocess.Popen('py file2.py' ,shell=True,stdin=None, stdout=None, stderr=None, close_fds=True)

Даже если я использую process.kill (), подпроцесс все еще работает в фоновом режиме.Он не выйдет, даже если использовать диспетчер задач.

Я также хотел передать переменную во второй файл.Я смотрю на что-то вроде

variable = input("enter variable)
subprocess.Popen('py file2.py -a' + variable ,shell=True,stdin=None, stdout=None, stderr=None, close_fds=True)

Но, насколько я посмотрел, мне сказали, что я могу передавать строки только через подпроцесс.это правда?

1 Ответ

0 голосов
/ 09 марта 2019

Я полагаю, что вы можете сделать это как с многопоточностью, так и с многопроцессорностью. Если вы хотите сразу запустить их оба, а затем отслеживать переменную, вы можете соединить их с помощью канала или очереди.

запуск при срабатывании:

from py_file2.py import your_func
import threading

Class A:
   foo1():
    .
    .
   foo2();
    if variable<30;
         #do this
    else;

      #put something here to make sure it only starts once
      t = threading.Thread(target = your_func)
      t.start()

    #rest of the code for foo2()

if __name__ == "__main__":   
  A.foo2();

начиная сразу:

from py_file2.py import your_func
import threading
from queue import Queue

Class A:
   foo1():
    .
    .
   foo2(your_queue);
    if variable<30;
         #do this
    else;

      your_queue.put(variable)

    #rest of the code for foo2()

if __name__ == "__main__": 
  your_queue = Queue()
  t = threading.Thread(target = your_func, args = (your_queue,))
  t.start()  
  A.foo2(your_queue);
...