我一直在使用this link瞭解多,但我卡在第二個例子:multiprocessing.Process .__ init __(self)做什麼?
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這個問題是關於Python的'self'和'__init__'的基本問題。這裏的OP的問題是關於爲什麼'__init__'正在調用'multiprocessing.Process .__ init __(self)'(它基本上稱它是父級的init) –