По предложению @ martineau ваш код может быть обновлен до:
import multiprocessing as mp
def f(n, xs, xn):
if n < 10:
xn.append(n)
xs.append(n + 1)
xn.append(n)
xs.append(n + 2)
if __name__ == '__main__':
with mp.Manager() as manager:
xs = manager.list()
xn = manager.list()
with mp.Pool(processes=2) as pool:
pool.starmap(f, [(n, xs, xn) for n in range(20)])
print(xn)
print(xs)
Это печатает
[3, 0, 3, 0, 4, 1, 4, 1, 5, 2, 5, 2, 6, 6, 7, 9, 7, 9, 8, 8]
[4, 1, 5, 2, 5, 2, 6, 3, 6, 3, 7, 4, 7, 8, 8, 10, 9, 11, 9, 10]
, для которого вы видите, у вас нет гарантии порядка, в котором n значенийпроизводятся, сохраняются.
РЕДАКТИРОВАТЬ:
import multiprocessing as mp
def f(n):
thresh = 10
if max(xs) <= thresh and n < thresh:
xs.append(n + 1)
if __name__ == '__main__':
with mp.Manager() as manager:
xs = manager.list([0])
with mp.Pool(processes=2) as pool:
pool.map(f, range(20))
print(sorted(xs))
Этот печатает
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]