반응형
별도의 파일 / 스크립트를 쓰거나 스레딩하지 않고 하위 프로세스에서 함수를 실행할 수 있습니까?
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)
기능을 사용 하여 스레드를 즉시 백그라운드로 만들 수도 있습니다 .
반응형
'programing' 카테고리의 다른 글
PHP의 htmlentities이지만 html 태그는 유지 (0) | 2021.01.07 |
---|---|
가동 중지 시간을 최소화하면서 Java 웹앱을 배포하는 모범 사례? (0) | 2021.01.07 |
'System.Int32'형식의 식은 'System.Object'반환 형식에 사용할 수 없습니다. (0) | 2021.01.07 |
Tkinter의 위젯 그룹에 스크롤바 추가 (0) | 2021.01.07 |
Java 빌더 패턴에 해당하는 Scala는 무엇입니까? (0) | 2021.01.07 |