使用python完成下列实验 。实验内容 1、建立Master,拥有两条队列。一条发布计算任务,一条接受结果。计算任务为对 100内的任意20个整数的阶乘计算。 2、建立Worker,实现对阶乘的计算。 3、运行时要求至少两个worker和一个master。
时间: 2024-02-18 08:02:13 浏览: 60
好的,下面我会给出一个简单的 Python 代码实现,实现一个 Master 和两个 Worker 的阶乘计算任务分发和结果接收。
Master 代码如下:
```python
import random
import multiprocessing as mp
# 阶乘计算任务队列
task_queue = mp.Queue()
# 计算结果队列
result_queue = mp.Queue()
# 生成随机数
numbers = random.sample(range(1, 101), 20)
def master():
# 向任务队列中添加任务
for num in numbers:
task_queue.put(num)
# 启动两个 Worker 进程
for _ in range(2):
p = mp.Process(target=worker)
p.start()
# 接收计算结果
for _ in range(len(numbers)):
result = result_queue.get()
print("阶乘 {} 的结果为 {}".format(result[0], result[1]))
def worker():
while True:
try:
# 从任务队列中获取任务
num = task_queue.get(timeout=1)
except:
break
# 计算阶乘
factorial = 1
for i in range(1, num + 1):
factorial *= i
# 将计算结果添加到结果队列中
result_queue.put((num, factorial))
if __name__ == '__main__':
master()
```
上述代码中,首先生成了 20 个在 1~100 范围内的随机整数,并将它们添加到任务队列中。然后启动了两个 Worker 进程,它们会不断从任务队列中获取任务进行计算,并将计算结果添加到结果队列中。最后,Master 进程会从结果队列中获取计算结果并输出。
Worker 代码如下:
```python
import multiprocessing as mp
# 阶乘计算任务队列
task_queue = mp.Queue()
# 计算结果队列
result_queue = mp.Queue()
def worker():
while True:
try:
# 从任务队列中获取任务
num = task_queue.get(timeout=1)
except:
break
# 计算阶乘
factorial = 1
for i in range(1, num + 1):
factorial *= i
# 将计算结果添加到结果队列中
result_queue.put((num, factorial))
if __name__ == '__main__':
# 启动两个 Worker 进程
for _ in range(2):
p = mp.Process(target=worker)
p.start()
```
上述代码中,Worker 进程会不断从任务队列中获取任务进行计算,并将计算结果添加到结果队列中。
在运行该代码时,首先需要在终端中执行以下命令:
```
python master.py
```
然后再新开一个终端执行以下命令:
```
python worker.py
```
可以通过在 Master 进程中修改 `numbers` 数组中的数据来进行不同的计算任务。
阅读全文