Не надо так низкоуровнево писать (обычно).
from concurrent.futures import ProcessPoolExecutor
D = {'x': [1, 2, 3], 'y': [4, 5, 6], 'z': [7, 8, 9]}
def process(arg):
key, values = arg
return key, [v * 10 for v in values]
if __name__ == "__main__":
with ProcessPoolExecutor() as executor:
result = executor.map(process, D.items())
print(dict(result))
Чтобы убедиться, что оно действительно работает и не блокирует друг друга:from concurrent.futures import ProcessPoolExecutor
from time import sleep
D = {'x': [1, 2, 3], 'y': [4, 5, 6], 'z': [7, 8, 9]}
def process(arg):
key, values = arg
print("executing", key, values)
sleep(1)
return key, [v * 10 for v in values]
if __name__ == "__main__":
with ProcessPoolExecutor(2) as executor:
result = executor.map(process, D.items())
print(dict(result))