面试题答案
一键面试1. 使用 multiprocessing.Value
和 multiprocessing.Array
这两个类用于在进程间共享简单的数据类型。multiprocessing.Value
用于共享单个值,multiprocessing.Array
用于共享数组。
import multiprocessing
def increment_value(shared_value):
with shared_value.get_lock():
shared_value.value += 1
def increment_array(shared_array):
for i in range(len(shared_array)):
with shared_array.get_lock():
shared_array[i] += 1
if __name__ == '__main__':
shared_value = multiprocessing.Value('i', 0)
shared_array = multiprocessing.Array('i', [0] * 5)
processes = []
for _ in range(5):
p1 = multiprocessing.Process(target=increment_value, args=(shared_value,))
p2 = multiprocessing.Process(target=increment_array, args=(shared_array,))
processes.extend([p1, p2])
p1.start()
p2.start()
for p in processes:
p.join()
print(f"Shared value: {shared_value.value}")
print(f"Shared array: {list(shared_array)}")
2. 使用 multiprocessing.Manager
multiprocessing.Manager
提供了多种可在进程间共享的数据类型,如 dict
、list
等。
import multiprocessing
def update_dict(shared_dict):
shared_dict['count'] = shared_dict.get('count', 0) + 1
def update_list(shared_list):
shared_list.append(len(shared_list))
if __name__ == '__main__':
manager = multiprocessing.Manager()
shared_dict = manager.dict()
shared_list = manager.list()
processes = []
for _ in range(5):
p1 = multiprocessing.Process(target=update_dict, args=(shared_dict,))
p2 = multiprocessing.Process(target=update_list, args=(shared_list,))
processes.extend([p1, p2])
p1.start()
p2.start()
for p in processes:
p.join()
print(f"Shared dict: {dict(shared_dict)}")
print(f"Shared list: {list(shared_list)}")