gpt4 book ai didi

python - multiprocessing.Process.__init__(self) 是做什么的?

转载 作者:行者123 更新时间:2023-11-28 18:52:02 25 4
gpt4 key购买 nike

我一直在使用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 方法是如何执行的,即使它从未被调用(至少明确地......)

如果有人可以帮助我完成示例以获得给定的输出,将不胜感激。

最佳答案

创建类的对象时,会自动调用其__init__() 方法对其进行初始化。在第二个示例中,类 Consumer 被定义为继承自 multiprocess.ProcessConsumer 在其初始化中做的第一件事是初始化其基础 Process,以确保它已准备好运行。与许多 OO 语言不同,基类 __init__() 函数不会在 Python 中自动调用。

在主进程的Consumer对象上调用start()时,在新进程中自动调用run()方法.那是在multiprocessing文档。

Queue 是多个进程通信的方式。通常,单独的进程看不到彼此的数据,但是 Queue 让它们来回传递消息。在这个例子中,主进程将几个任务放入一个队列,其他每个进程将从该队列中拉出一个任务,执行它,并将结果发送回另一个队列。

关于python - multiprocessing.Process.__init__(self) 是做什么的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11196438/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com