| 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]) |