#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 может на самом деле не помочь, если вы хотите распараллелить работу из-за глобальной блокировки интерпретатора.