Многопроцессорная обработка и списки в python

#python-3.x #list #multiprocessing

#python-3.x #Список #многопроцессорная обработка

Вопрос:

У меня есть список заданий, но из-за определенного условия не все задания должны выполняться параллельно одновременно, потому что иногда важно, чтобы a завершалось до того, как я начну b или наоборот (на самом деле не важно, какой из них запускается первым, просто не то, что они выполняются одновременно), поэтомуя думал, что сохраняю список текущих запущенных потоков, и когда когда-либо запускается новый on, он проверяет в этом списке текущих запущенных потоков, может ли поток продолжаться или нет. Я написал для этого несколько примеров кода:

 from time import sleep
from multiprocessing import Pool

def square_and_test(x):
    print(running_list)
    if not x in running_list:
        running_list = running_list.append(x)
        sleep(1)
        result_list = result_list.append(x**2)
        
        running_list = running_list.remove(x)
    else:
        print(f'{x} is currently worked on')

task_list = [1,2,3,4,1,1,4,4,2,2]
running_list = []
result_list = [] 
pool = Pool(2)
pool.map(square_and_test, task_list)
print(result_list)
  

этот код завершается UnboundLocalError: local variable 'running_list' referenced before assignment ошибкой, поэтому я предполагаю, что мои потоки не имеют доступа к глобальным переменным. Есть ли способ обойти это? Если нет, есть ли другой способ решить эту проблему?

Комментарии:

1. Я не думаю, что это хороший подход к проблеме. Если вам нужно, чтобы они ждали вычислений, я думаю, было бы лучше использовать шаблон producer / consumer . Кроме того, являются ли ваши вычисления идемпотентными? в этом случае вам просто нужно как-то их кэшировать. Просто бросаю несколько идей здесь.

2. вы правы, это гораздо лучшее решение (шаблон производителя / потребителя)