Не изменяется глобальная переменная при использовании Pool (python)

В массив count не добавляется переменная x, понятия не имею что сделать. При использовании Process тоже не добавлялось (Потоки не использовал ввиду существования GIL)

import time
from multiprocessing import Pool
count = []
def check(c):
    ans = 0
    for ch in str(c):
        ans += int(ch)
    return ans % 2
def dsa(x):
    count = 0
    for c in range(0,(len(x))):
        if x[c] != 0:
            count+=1
    return count
def thread(star,end):
    global count
    x = dsa([check(x) for x in range(star, end+1)])
    print(x)
    count.append(x)
if __name__ == '__main__':
    A = 1
    B = 10000
    time1 = time.time()
    pool = Pool(processes=2)
    start = time.time()
    r1 = pool.apply_async(thread, (A, B//2))
    r2 = pool.apply_async(thread, (B//2+1, B))
    pool.close()
    pool.join()
    print(sum(count))
    print(time.time()-time1))

Ответы (1 шт):

Автор решения: eri

Процессы в питон не имеют общей памяти. Для обмена данными лучше пользоваться очередями.

Если надо раздать массив без очередей

from multiprocessing import Array
count = Array('i', [])
..
count.append(x)

'i' - указывает тип содержимого массива.

В вашем случае map лучше:

def thread(star,end):
    global count
    x = dsa([check(x) for x in range(star, end+1)])
    print(x)
    return x

count = pool.map(thread, [(A, B//2),(B//2+1, B)])
→ Ссылка