В настоящее время при работе с обещаниями хорошей практикой является использование ключевых слов 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 внутри функции.
Надеюсь, это поможет.
Хорошо, таким образом, я закончил тем, что шел с кодом, я записал <ударяют> здесь, на моем веб-сайте забастовка> <глоток> , ссылка является битой, представление о archive.org глоток> ( также доступный на GitHub). Я могу использовать его следующим способом:
from filelock import FileLock
with FileLock("myfile.txt"):
# work with the file as it is now locked
print("Lock acquired.")
Здесь существует межплатформенный модуль захвата файла: Portalocker
, Хотя, поскольку Kevin говорит, пишущий в файл от нескольких процессов сразу, является чем-то, чего Вы хотите избежать если вообще возможный.
, Если Вы можете рожок для обуви Ваша проблема в базу данных, Вы могли бы использовать SQLite. Это поддерживает параллельный доступ и обрабатывает его собственную блокировку.
Координирование доступа к единственному файлу на уровне ОС чревато всеми видами проблем, которые Вы, вероятно, не хотите решать.
Ваш лучший выбор, имеют отдельный процесс, который координирует доступ для чтения-записи к тому файлу.
Блокировка является платформой и конкретным устройством, но обычно, у Вас есть несколько опций:
Для всех этих методов, необходимо будет использовать спин-блокировку (повторная попытка после отказа) техника для получения и тестирования блокировки. Это действительно оставляет маленькое окно для неправильной синхронизации, но ее достаточно обычно маленькое, чтобы не быть главной проблемой.
при поиске решения, которое является кросс-платформенным, затем Вы - более обеспеченный вход к другой системе с помощью некоторого другого механизма (следующей лучшей вещью является метод NFS выше).
Примечание, что sqlite подвергается тем же ограничениям по NFS, который нормальные файлы, таким образом, Вы не можете записать в sqlite базу данных по сетевому ресурсу и получить синхронизацию бесплатно.
Блокировка файла обычно является определенной для платформы операцией, таким образом, Вы, возможно, должны допускать возможность работы различных операционных систем. Например:
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"
Я предпочитаю файл блокировки - Независимая от платформы блокировка файла