#СПС Dr. Bacon, разобрался
from multiprocessing import Process, Value, Array, current_process, Lock, Manager, Barrier
from time import sleep
from sys import exit
def my_transmitter(LOCK_PROCESS,START_BARRIER,my_number,my_array,my_dict,my_list):
i=1
START_BARRIER.wait()
while i<5:
LOCK_PROCESS.acquire()
print('\n',current_process())
my_number.value=i #общая переменная
my_array[i]=i*100 #общий массив
my_dict['key'+str(i)]='value'+str(i)#эмуляция словаря
my_list.append(i) #общий список
print('my_number ',my_number.value)
print('my_array ',my_array[:])
print('my_dict ',my_dict)
print('my_list ',my_list)
LOCK_PROCESS.release()
i=i+1
sleep(3)
continue
def my_receiver(MY_PAUSE,LOCK_PROCESS,START_BARRIER,my_number,my_array,my_dict,my_list):
START_BARRIER.wait()
while True:
sleep(MY_PAUSE)
LOCK_PROCESS.acquire()
print('\n',current_process())
print('my_number ',my_number.value)
print('my_array ',my_array[:])
print('my_dict ',my_dict)
print('my_list ',my_list)
LOCK_PROCESS.release()
continue
if __name__ =='__main__':
LOCK_PROCESS=Lock()
START_BARRIER=Barrier(3)
my_number=Value('d',0) #общая переменная, чтоб пользоваться нужно сначало создать и скормить процессам,только числа
my_array=Array('i',10) #общий массив, я так понял не расширяемый, фиксированный размер, только числа, иначе исключение
#нужно поковырять multiprocessing.sharedctypes, судя по всему это даёт возможность использовать не только числа
my_dict=Manager().dict() #от обычного словаря отличий пока не нашёл
my_list=Manager().list(['A','B']) #ведёт себя как обычный лист
#также пишут, что Manager() медленее Value,Array
PROCESS_TRANSMITTER=Process(target=my_transmitter,args=(LOCK_PROCESS,START_BARRIER,my_number,my_array,my_dict,my_list),name='TRANSMITTER')
PROCESS_RECEIVER_1=Process(target=my_receiver,args=(2,LOCK_PROCESS,START_BARRIER,my_number,my_array,my_dict,my_list),name='RECEIVER_1',daemon=True)
PROCESS_RECEIVER_2=Process(target=my_receiver,args=(4,LOCK_PROCESS,START_BARRIER,my_number,my_array,my_dict,my_list),name='RECEIVER_2',daemon=True)
PROCESS_TRANSMITTER.start()
PROCESS_RECEIVER_1.start()
PROCESS_RECEIVER_2.start()
PROCESS_TRANSMITTER.join()
exit()