Answer the question
In order to leave comments, you need to log in
How to transfer a dictionary from one process to another in Python?
One process is constantly creating a new dictionary. Other processes need to obtain this dictionary.
How to transfer a dictionary from one process to another in Python?
I made it so that this dictionary is written to a file. The rest are reading it.
Obviously this is not buzzing, the dictionary changes with every network request, the hard drive is broken.
HELP!!! Either an example, or which function to learn?
Answer the question
In order to leave comments, you need to log in
#СПС 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()
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question