Python Ζ3 και concurrent.futures

ψήφοι
0

Θέλω να λύσει μια σειρά από περιέχεται προβλήματα παράλληλα, μετά την οποία προστίθεται πληροφορίες εκτός από την επίλυση ένα νέο πρόβλημα.

Παρακάτω είναι ένα παράδειγμα της δομής του προγράμματος που χρησιμοποιείται για την επίλυση του προβλήματος:

from z3 import *
import concurrent.futures


# solver test function
def add(a, b, solver, index):
    solver.append(a > b)
    assert solver.check()
    model = solver.model()
    return {
        'solver': solver,
        'av': model[a],
        'a': a,
        'b': b,
        'bv': model[b],
        'index': index
    }


with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
    # start solving the problems
    to_compute = []
    for i in range(3):
        sol = z3.Solver()
        to_compute.append(executor.submit(
            add,
            Int('a{}'.format(i)),
            Int('b{}'.format(i)),
            sol,
            i
        ))
    # wait for the solution to the computations
    next_to_solve = []
    for result_futures in concurrent.futures.as_completed(to_compute):
        results = result_futures.result()
        print(results)
        sol = results['solver']
        sol.append(results['a'] > results['av'])
        next_to_solve.append(
            executor.submit(
                add,
                results['a'],
                results['b'],
                sol,
                results['index']
            )
        )

Τα αποτελέσματα είναι διαφορετικά κάθε φορά που εκτελείται το πρόγραμμα, τα αποτελέσματα περιλαμβάνουν:

  • «Εντολή άκυρο dec_ref» Z3Exception
  • Python που συντριβή
  • κανένα σφάλμα

Τι πρέπει να κάνω, για να κάνει το πρόγραμμα πιο αξιόπιστο;

Δημοσιεύθηκε 19/09/2018 στις 13:20
πηγή χρήστη
Σε άλλες γλώσσες...                            


1 απαντήσεις

ψήφοι
1

Είδες αυτό το παράδειγμα: http://github.com/Z3Prover/z3/blob/master/examples/python/parallel.py

Δεν είμαι ειδικός στις ταυτόχρονες λειτουργίες στην z3py, αλλά φαίνεται να είναι θα πρέπει να είστε πολύ προσεκτικοί σχετικά με τη δημιουργία των μεταβλητών στο ίδιο πλαίσιο που τρέχετε τα λύτες. Υπάρχουν μερικές συμβουλές σε αυτό το πολύ αρχείων.

Απαντήθηκε 22/09/2018 στις 21:16
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more