import threading
from test.support import threading_helper
from unittest import TestCase
def run_in_threads(targets):
"""Run `targets` in separate threads"""
threads = [
threading.Thread(target=target)
for target in targets
]
for thread in threads:
thread.start()
for thread in threads:
thread.join()
@threading_helper.requires_working_threading()
class TestSlots(TestCase):
def test_object(self):
class Spam:
__slots__ = [
"eggs",
]
def __init__(self, initial_value):
self.eggs = initial_value
spam = Spam(0)
iters = 20_000
def writer():
for _ in range(iters):
spam.eggs += 1
def reader():
for _ in range(iters):
eggs = spam.eggs
assert type(eggs) is int
assert 0 <= eggs <= iters
run_in_threads([writer, reader, reader, reader])