2016-02-29 3 views
0

У меня есть небольшой веб-сервер, выполняющий некоторые операции с запросом POST. Он считывает файл данных, выполняет некоторые проверки и затем сохраняет файл, добавляя в него информацию из POST.Параллельный доступ к файлу данных в Python

Проблема заключается в том, что если два клиента выполняют запрос POST почти в одно и то же время, оба будут читать один и тот же файл, затем один напишет файл, содержащий новую информацию, а затем другой клиент напишет файл, содержащий его новую информацию, но без информации от другого клиента, поскольку эта часть не была в файле, когда она была прочитана.

f = open("foo.txt", "r+") 
tests_data = yaml.safe_load(f) 
post_data = json.loads(web.data()) 
#Some checks 

f.write(json.dumps(tests_data)) 
f.close() 

Я хотел сценарий «ждать», не давая ошибку, в «открытой» линии, если файл уже открыт другим процессом того же кода, а затем прочитать файл, когда другой процесс и закрыл файл.

Или что-то еще, если существуют другие решения.

+0

имеет какое-то системы массового обслуживания, может быть, где ваша программа записывает в очередь людей, в настоящее время доступа к некоторым вспомогательному файлу данных, а затем выполняет, если назначенный уникальный идентификатор находится в передней части файла. попросите программу очистить строки своего экземпляра. или же вы хотите это сделать. – jh44tx

ответ

3

Может ли стандартный замок не соответствовать вашим потребностям? Блокировка должна быть на уровне модуля.

from threading import Lock 
# this needs to be module level variable 
lock = Lock 

with lock: 
    # do your stuff. only one thread at a time can 
    # work in this space... 
Смежные вопросы