Объект Pickle: многопоточность безопасна?

#multithreading #pickle #python-3.5

#многопоточность #pickle #python-3.5

Вопрос:

Я использую Python3.5.1 с модулем обработки потоков.

Я видел много вопросов о безопасной записи в словаре и файле Pickle из нескольких потоков. В моем случае я хочу его прочитать, и возникает вопрос:

Могу ли я загружать (безопасно) файл pickle несколько раз одновременно?

Псевдокод:

 import sys    
import threading
import pickle

def function_1( pickle_file, arg_blue ):
    my_dic = pickle.load( open( pickle_file, "rb" ) )
    # process my_dic with arg_blue

def function_2( pickle_file, arg_red ):
    my_dic = pickle.load( open( pickle_file, "rb" ) )
    # process my_dic with arg_red

def main( pickle_file, arg_blue, arg_red ):
    # Using two threads to call function_1 and function_2 at the same time.
    # Function 1 and function 2 will not exchange data. Is it better to use multiprocess module ?

    # thread_blue will run function_1
    # thread_red will run function_2
    # Each of them will write in a distinct output

if __name__ == "__main__":
    main( sys.argv[1], sys.argv[2], sys.argv[3] )
  

Вызов скрипта:

 python3.5 my_script.py my_pickle_file.p blue red
  

Любые предложения или комментарии будут высоко оценены!

Ответ №1:

Да, чтение файла из нескольких потоков или процессов безопасно, если вы открываете файл в потоке, то есть не передаете один и тот же дескриптор открытия нескольким потокам, это плохо.

Обратите внимание, что многопоточность в Python может на самом деле не помочь, если вы хотите распараллелить работу из-за глобальной блокировки интерпретатора.