당신은 instance
이 이전에 당신의 class x
의 인스턴스로 설정 변수입니다 instance.start()
전화를 결여 될 수 있습니다.
좀 더 (코드) 문맥을 제공하면 대답하기가 더 쉽습니다. 내가보기에 새로운 스레드 또는 프로세스를 설정하고 시작하는 두 가지 다른 방법이 혼합되어 있습니다. 이것은 반드시 나쁜 것은 아니며 의도적 일 수 있습니다. 그러나 그렇지 않다면, 당신은 당신이 필요 이상으로 더 많은 것을 타이핑하고 있습니다.
한 가지 방법은 다음과 같습니다 f
와
p = Process(target=f, args=('bob',))
p.start()
p.join()
어떤 기능 것. 첫 번째 줄은 새로운 Process
인스턴스를 설정하고 두 번째 줄은 분기하고 따라서 (하위) 프로세스를 시작하고 p.join()
이 완료 될 때까지 대기합니다. the documentation
두 번째 사용 예에서는 하위 클래스를 class Process
으로 설정하고 생성자를 호출 할 때 일반적으로 target
을 지정하지 않습니다. run
은 실제로 process.start()
메서드를 호출 할 때 fork로 호출되는 기본 메서드입니다. 당신이 인수를하지 않아도 다음 하위 클래스에 대한 __init__
생성자를 정의 할 필요가없는 경우
class MySubProcess(multiprocessing.Process):
def __init__(self, *args, **kwargs):
super().__init__(self)
# some more specific setup for your class using args/kwargs
def run(self):
# here's the code that is going to be run as a forked process
pass
그런 다음
p = MySubProcess(any_args_here)
p.start()
p.join()
으로 실행합니다.
두 가지 방법 모두 스레딩 스레드와 멀티 프로세싱간에 전환 할 수 있습니다. 코드 변경이 거의없는 프로세스 데이터 유형. 물론 데이터 공유가 작동하는 방식은 달라지며 통신은 스레드와 프로세스에 따라 다릅니다.
출처
2013-02-22 13:19:55
cfi
고마워, 나는 대답을 직접 추가하기 위해 여기로 돌아왔다. 실제로는 작동하지 않는 것 같았다. 사실 run() 메소드 내부의 일식/pydev 중단 점이 문제를 일으켰다. print() 함수를 배치함으로써, 나는 무슨 일이 일어나고 있는지 알 수있었습니다. –