Wie Schreibe ich eine Folge von Versprechungen in Python?
Ist es möglich, zu schreiben, eine Folge von Versprechen (oder Aufgaben) mit nur Python 3.6.1 Standard-Bibliothek?
Beispielsweise eine Sequenz von zusagen in JavaScript geschrieben werden als:
const SLEEP_INTERVAL_IN_MILLISECONDS = 200;
const alpha = function alpha (number) {
return new Promise(function (resolve, reject) {
const fulfill = function() {
return resolve(number + 1);
};
return setTimeout(fulfill, SLEEP_INTERVAL_IN_MILLISECONDS);
});
};
const bravo = function bravo (number) {
return new Promise(function (resolve, reject) {
const fulfill = function() {
return resolve(Math.ceil(1000*Math.random()) + number);
};
return setTimeout(fulfill, SLEEP_INTERVAL_IN_MILLISECONDS);
});
};
const charlie = function charlie (number) {
return new Promise(function (resolve, reject) {
return (number%2 == 0) ? reject(number) : resolve(number);
});
};
function run() {
return Promise.resolve(42)
.then(alpha)
.then(bravo)
.then(charlie)
.then((number) => {
console.log('success: ' + number)
})
.catch((error) => {
console.log('error: ' + error);
});
}
run();
Jede Funktion gibt auch ein Versprechen mit asynchronen Verarbeitung zur Folge, dass würde aufgelöst werden/abgelehnt werden, indem die unmittelbar folgenden Versprechen.
Ich bin mir bewusst, Bibliotheken wie verspricht-2.01 b
und asyncio 3.4.3
und ich bin auf der Suche nach einem Python-STL-Lösung. Also, wenn ich für den import nicht-STL-Bibliothek, die ich lieber mit RxPython statt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist ein ähnliches Programm mit asyncio und die
async/await
synthax:EDIT: Wenn du daran interessiert bist reactive-streams, sollten Sie überlegen, mit aiostream.
Hier ein einfaches Beispiel:
Mehr Beispiele in der Dokumentation.
Haben Sie Glück, Python 3.4 und höher enthalten
asyncio
, obwohl die Funktion die du suchst (Zukunft) ist verfügbar in Python 3.5 und höher.Aus Ihrem eigenen link über
asyncio
: "Diese version ist nur relevant für Python 3.3, was keine asyncio in seiner stdlib."Beispiel: