Asynchronisierter Veränderung der globalen Variablen sicher? (Python)Python

Python-Programme
Anonymous
 Asynchronisierter Veränderung der globalen Variablen sicher? (Python)

Post by Anonymous »

Ich habe recherchiert, wenn ich in ASGI-Umgebungen arbeite (Single-Threaded), unabhängig davon, ob es sicher ist, Singletons oder globale Variablen zu mutieren. Ich dachte anfangs, dass es sicher wäre, aber Ai sagt mir, dass es nicht sicher ist und es fällt mir schwer, es zu glauben, weil ich es nicht reproduzieren kann. Sehen Sie sich diesen Code hier an. < /P>

Code: Select all

import asyncio
import random

counter = 0

async def increment(name: str):
global counter
await asyncio.sleep(random.uniform(0, 5))  # yield control to event loop
counter = counter + 1      # write (based on possibly stale value)
print(f"{name}: counter → {counter}")

async def main():
await asyncio.gather(*[increment(f"{i}") for i in range(10000)])
print(f"Final counter (should be 10000): {counter}")

if __name__ == "__main__":
asyncio.run(main())
< /code>
Dies wird am Ende korrekt wiedergegeben. Hier ist ein Beispiel für die letzten Eingabezeilen: < /p>
7825: counter → 9995
8403: counter → 9996
6039: counter → 9997
5887: counter → 9998
9942: counter → 9999
8631: counter → 10000
Final counter (should be 10000): 10000
Das ist sicher, oder?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post