Existe-t-il un moyen facile d’attendre que certaines conditions soient remplies?
J'ai besoin d'attendre dans un script jusqu'à ce qu'un certain nombre de conditions deviennent de véritables?
Je sais que je peux rouler mon propre concours complet à l'aide de variables de condition, et les amis, mais je ne veux pas passer par la peine de la mettre en œuvre, puisque certains de propriété de l'objet de modifications proviennent de filetage extérieur dans un enveloppé de la bibliothèque C++ (Boost.Python), donc je ne peux pas détourner __setattr__
dans une classe et de mettre une variable de condition, ce qui me laisse avec soit en essayant de créer et de signal d'un Python de la variable de condition à partir de C++, ou envelopper un natif et d'attendre sur les en Python, les deux sons délicats, inutilement compliqué et ennuyeux.
Est-il un moyen plus facile de le faire, sauf une interrogation continue de l'état?
Idéalement il doit être le long des lignes de
res = wait_until(lambda: some_predicate, timeout)
if (not res):
print 'timed out'
source d'informationauteur Alex B
Vous devez vous connecter pour publier un commentaire.
Malheureusement, la seule possibilité de répondre à vos contraintes périodiquement sondagee.g....:
ou similaires. Cela peut être optimisé de plusieurs façons, si
somepredicate
peut être décomposé (par exemple, si il est connu pour être unand
de plusieurs clauses, surtout si certaines de ces clauses sont à leur tour soumis à l'optimisation en étant détectable viathreading.Event
s ou autre, etc, etc), mais dans les conditions générales que vous demandez, ce inefficaces approche est la seule façon d'en sortir.Vous avez répondu à votre propre question: non.
Puisque vous avez affaire à des bibliothèques externes en boost.python, qui peut changer les objets à leurs loisirs, vous avez besoin de disposer de ces routines d'appel d'un gestionnaire d'événement d'actualisation, ou de travailler avec une condition.
Ici, c'est le filetage de l'extension d'Alex solution: