Lecture des valeurs des cellules en plusieurs threads simultanément avec Python.NET

Contents
[ ]

Pour lire les valeurs des cellules dans plus d’un thread simultanément, définissez worksheet.cells.multi_thread_reading à True. Si vous ne le faites pas, vous pourriez obtenir des valeurs incorrectes.

Le code suivant :

  1. Crée un classeur
  2. Ajoute une feuille de calcul
  3. Remplit la feuille avec des valeurs de chaîne
  4. Crée deux threads qui lisent simultanément des valeurs à partir de cellules aléatoires Si les valeurs lues sont correctes, rien ne se passe. Si les valeurs lues sont incorrectes, un message est affiché.

Si vous commentez cette ligne :

test_workbook.worksheets[0].cells.multi_thread_reading = True

alors le message suivant sera déclenché :

if s != f"R{row}C{col}":
    print("This message will show when cells read values are incorrect")

Sinon, le programme s’exécute sans afficher de message, ce qui signifie que toutes les valeurs lues dans les cellules sont correctes.

import threading
import random
import time
from aspose.cells import Workbook

test_workbook = None

def thread_loop():
    rand = random.Random()
    while True:
        try:
            row = rand.randint(0, 9999)
            col = rand.randint(0, 99)
            s = test_workbook.worksheets[0].cells.get(row, col).string_value
            if s != f"R{row}C{col}":
                print("This message will show up when cells read values are incorrect.")
        except:
            pass

def test_multi_threading_read():
    global test_workbook
    test_workbook = Workbook()
    test_workbook.worksheets.clear()
    test_workbook.worksheets.add("Sheet1")

    for row in range(10000):
        for col in range(100):
            test_workbook.worksheets[0].cells.get(row, col).value = f"R{row}C{col}"

    # Commenting this line will show a pop-up message
    # test_workbook.worksheets[0].cells.multi_thread_reading = True

    my_thread1 = threading.Thread(target=thread_loop, daemon=True)
    my_thread1.start()

    my_thread2 = threading.Thread(target=thread_loop, daemon=True)
    my_thread2.start()

    time.sleep(5)  # Sleep for 5 seconds

if __name__ == "__main__":
    test_multi_threading_read()