Блокировка файла в Python

В настоящее время при работе с обещаниями хорошей практикой является использование ключевых слов async / await. Они в основном позволяют выполнять асинхронный код синхронно. Используя их, ваш код будет выглядеть следующим образом:

async function setTransferHistory(senderId, recipientId, amountMoney, transferTitle) {
     return await Transaction.create({
       id_sender: senderId,
       id_recipient: recipientId,
       date_time: getTodayDate(),
       amount_money: amountMoney,
       transfer_title: transferTitle,
     });
}

await setTransferHistory(senderId, recipientId, amountMoney, transferTitle);
setWidgetStatus(senderId);
setWidgetStatus(recipientId);

Ключевое слово await останавливает выполнение функции и ожидает результата асинхронного выполнения Transaction.create () и . необходим для использования await внутри функции.

Надеюсь, это поможет.

133
задан Evan Fosmark 29 September 2013 в 22:29
поделиться

6 ответов

Хорошо, таким образом, я закончил тем, что шел с кодом, я записал <ударяют> здесь, на моем веб-сайте <глоток> , ссылка является битой, представление о archive.org ( также доступный на GitHub). Я могу использовать его следующим способом:

from filelock import FileLock

with FileLock("myfile.txt"):
    # work with the file as it is now locked
    print("Lock acquired.")
99
ответ дан 24 November 2019 в 00:03
поделиться

Здесь существует межплатформенный модуль захвата файла: Portalocker

, Хотя, поскольку Kevin говорит, пишущий в файл от нескольких процессов сразу, является чем-то, чего Вы хотите избежать если вообще возможный.

, Если Вы можете рожок для обуви Ваша проблема в базу данных, Вы могли бы использовать SQLite. Это поддерживает параллельный доступ и обрабатывает его собственную блокировку.

38
ответ дан 24 November 2019 в 00:03
поделиться

Координирование доступа к единственному файлу на уровне ОС чревато всеми видами проблем, которые Вы, вероятно, не хотите решать.

Ваш лучший выбор, имеют отдельный процесс, который координирует доступ для чтения-записи к тому файлу.

7
ответ дан 24 November 2019 в 00:03
поделиться

Блокировка является платформой и конкретным устройством, но обычно, у Вас есть несколько опций:

  1. скопление Использования (), или эквивалентный (если Ваша OS поддерживает его). Это - консультативная блокировка, если Вы не проверяете на блокировку, его проигнорированный.
  2. Использование lock-copy-move-unlock методология, где Вы копируете файл, пишет новые данные, затем перемещает его (перемещение, не копируют - перемещение является атомарной операцией в Linux - проверяют Вашу ОС), и Вы проверяете на существование файла блокировки.
  3. Использование каталог как "блокировка". Это необходимо, если Вы пишете в NFS, так как NFS не поддерживает скопление ().
  4. существует также возможность использования общей памяти между процессами, но я никогда не пробовал это; это является очень определенным для ОС.

Для всех этих методов, необходимо будет использовать спин-блокировку (повторная попытка после отказа) техника для получения и тестирования блокировки. Это действительно оставляет маленькое окно для неправильной синхронизации, но ее достаточно обычно маленькое, чтобы не быть главной проблемой.

при поиске решения, которое является кросс-платформенным, затем Вы - более обеспеченный вход к другой системе с помощью некоторого другого механизма (следующей лучшей вещью является метод NFS выше).

Примечание, что sqlite подвергается тем же ограничениям по NFS, который нормальные файлы, таким образом, Вы не можете записать в sqlite базу данных по сетевому ресурсу и получить синхронизацию бесплатно.

12
ответ дан 24 November 2019 в 00:03
поделиться

Блокировка файла обычно является определенной для платформы операцией, таким образом, Вы, возможно, должны допускать возможность работы различных операционных систем. Например:

import os

def my_lock(f):
    if os.name == "posix":
        # Unix or OS X specific locking here
    elif os.name == "nt":
        # Windows specific locking here
    else:
        print "Unknown operating system, lock unavailable"
5
ответ дан 24 November 2019 в 00:03
поделиться

Я предпочитаю файл блокировки - Независимая от платформы блокировка файла

14
ответ дан 24 November 2019 в 00:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: