programing

별도의 파일 / 스크립트를 쓰거나 스레딩하지 않고 하위 프로세스에서 함수를 실행할 수 있습니까?

nasanasas 2021. 1. 7. 08:03
반응형

별도의 파일 / 스크립트를 쓰거나 스레딩하지 않고 하위 프로세스에서 함수를 실행할 수 있습니까?


import subprocess

def my_function(x):
    return x + 100

output = subprocess.Popen(my_function, 1) #I would like to pass the function object and its arguments
print output 
#desired output: 101

별도의 스크립트를 사용하여 하위 프로세스를 여는 것에 대한 문서 만 찾았습니다. 누구든지 함수 객체를 전달하는 방법 또는 함수 코드를 전달하는 쉬운 방법을 알고 있습니까?


다중 처리 모듈과 같은 것을 찾고 있다고 생각합니다.

http://docs.python.org/library/multiprocessing.html#the-process-class

하위 프로세스 모듈은 프로세스를 생성하고 입력 / 출력으로 작업을 수행하기위한 것이며 함수를 실행하기위한 것이 아닙니다.

다음은 multiprocessing코드 버전입니다.

from multiprocessing import Process, Queue

def my_function(q, x):
    q.put(x + 100)

if __name__ == '__main__':
    queue = Queue()
    p = Process(target=my_function, args=(queue, 1))
    p.start()
    p.join() # this blocks until the process terminates
    result = queue.get()
    print result

표준 Unix fork시스템 호출을 os.fork(). fork()동일한 스크립트가 실행되는 새 프로세스를 만듭니다. 새 프로세스에서는 0을 반환하고 이전 프로세스에서는 새 프로세스의 프로세스 ID를 반환합니다.

child_pid = os.fork()
if child_pid == 0:
  print "New proc"
else:
  print "Old proc"

다중 프로세스 사용을위한 이식 가능한 추상화를 제공하는 다중 처리 지원을 제공하는 상위 수준 라이브러리의 경우 다중 처리 모듈이 있습니다. 두 기술에 대한 간략한 소개와 함께 IBM DeveloperWorks, Multiprocessing with Python 에 대한 기사가 있습니다 .


다중 처리에 대한 Brian McKenna의 위 게시물은 정말 유용하지만 스레드 경로 (프로세스 기반과 반대)로 이동하려는 경우이 예제를 통해 시작할 수 있습니다.

import threading
import time

def blocker():
    while True:
        print "Oh, sorry, am I in the way?"
        time.sleep(1)

t = threading.Thread(name='child procs', target=blocker)
t.start()

# Prove that we passed through the blocking call
print "No, that's okay" 

setDaemon(True)기능을 사용 하여 스레드를 즉시 백그라운드로 만들 수도 있습니다 .

참조 URL : https://stackoverflow.com/questions/2046603/is-it-possible-to-run-function-in-a-subprocess-without-threading-or-writing-a-se

반응형