나는 멀티에 대해 배울 this link을 사용하고있다, 그러나 나는 두 번째 예제에 붙어 :다중 처리 란 무엇입니까? 프로세스 .__ 초기화 __ (자체)합니까?
이import multiprocessing
import time
class Consumer(multiprocessing.Process):
def __init__(self, task_queue, result_queue):
multiprocessing.Process.__init__(self)
self.task_queue = task_queue
self.result_queue = result_queue
def run(self):
proc_name = self.name
while True:
next_task = self.task_queue.get()
if next_task is None:
# Poison pill means we should exit
print '%s: Exiting' % proc_name
break
print '%s: %s' % (proc_name, next_task)
answer = next_task()
self.result_queue.put(answer)
return
class Task(object):
def __init__(self, a, b):
self.a = a
self.b = b
def __call__(self):
time.sleep(0.1) # pretend to take some time to do our work
return '%s * %s = %s' % (self.a, self.b, self.a * self.b)
def __str__(self):
return '%s * %s' % (self.a, self.b)
if __name__ == '__main__':
# Establish communication queues
tasks = multiprocessing.Queue()
results = multiprocessing.Queue()
# Start consumers
num_consumers = multiprocessing.cpu_count() * 2
print 'Creating %d consumers' % num_consumers
consumers = [ Consumer(tasks, results)
for i in xrange(num_consumers) ]
for w in consumers:
w.start()
# Enqueue jobs
num_jobs = 10
for i in xrange(num_jobs):
tasks.put(Task(i, i))
# Add a poison pill for each consumer
for i in xrange(num_consumers):
tasks.put(None)
# Start printing results
while num_jobs:
result = results.get()
print 'Result:', result
num_jobs -= 1
첫째, 누군가가 multiprocessing.Process.__init__(self)
가 않습니다 정확히 설명해주십시오 수 있을까? 또한 큐가 어떻게 작동하는지 완전히 모르겠다. 적어도 (명시 적으로 적어도 ... 명시 적으로 호출되지는 않지만) Consumer 클래스의 run 메서드가 어떻게 실행되는지 혼란 스럽다.
누군가가 나를 도울 수 있다면 주어진 출력을 얻기 위해 예제를 살펴보면 크게 감사 할 것입니다.
아마도 [이 질문] (http://stackoverflow.com/questions/625083/python-init-and-self-what-do-they-do)이 도움이 될 수 있습니다. 나는 거의 당신의 복사본으로 그것을 제안합니다. – brandizzi
@brandizzi 그 질문은 파이썬의'self'와'__init__'에 관한 근본적인 질문입니다. 여기서 OP의 질문은'__init__'가'다중 처리. 프로세스 .__ init __ (자체)'를 호출하는 이유입니다. –