rupython 1.2.11__py3-none-any.whl → 1.2.13__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- rupython/__/342/225/250/320/247/342/225/250/342/226/221/342/225/250/342/224/202/342/225/250/342/225/233/342/225/250/342/225/227/342/225/250/342/225/233/342/225/250/342/226/223/342/225/250/342/225/233/342/225/244/320/227/342/225/250/342/225/234/342/225/244/320/233/342/225/250/342/225/243_/342/225/250/342/225/221/342/225/250/342/225/233/342/225/250/342/224/244__.py +49 -4
- rupython/__/342/225/250/320/256/342/225/250/342/226/222/342/225/244/320/231/342/225/250/342/225/225/342/225/250/342/225/241_/342/225/244/320/224/342/225/244/320/223/342/225/250/342/225/234/342/225/250/342/225/221/342/225/244/320/226/342/225/250/342/225/225/342/225/250/342/225/225__.py +9 -0
- rupython//342/225/250/320/254/342/225/250/342/225/233/342/225/250/342/224/244/342/225/244/320/223/342/225/250/342/225/227/342/225/250/342/225/225//342/225/250/320/240/342/225/244/320/221/342/225/250/342/225/225/342/225/250/342/225/234/342/225/244/320/225/342/225/244/320/220.py +206 -0
- rupython//342/225/250/320/254/342/225/250/342/225/233/342/225/250/342/224/244/342/225/244/320/223/342/225/250/342/225/227/342/225/250/342/225/225//342/225/250/320/241/342/225/250/320/244.py +61 -76
- rupython//342/225/250/320/254/342/225/250/342/225/233/342/225/250/342/224/244/342/225/244/320/223/342/225/250/342/225/227/342/225/250/342/225/225//342/225/250/320/244/342/225/250/342/226/221/342/225/244/320/222/342/225/250/342/226/221/342/225/250/320/242/342/225/244/320/220/342/225/250/342/225/241/342/225/250/342/225/235/342/225/244/320/237.py +222 -209
- rupython//342/225/250/320/254/342/225/250/342/225/233/342/225/250/342/224/244/342/225/244/320/223/342/225/250/342/225/227/342/225/250/342/225/225//342/225/250/320/252/342/225/244/320/223/342/225/244/320/227/342/225/250/342/226/221.py +87 -0
- rupython//342/225/250/320/254/342/225/250/342/225/233/342/225/250/342/224/244/342/225/244/320/223/342/225/250/342/225/227/342/225/250/342/225/225//342/225/250/320/252/342/225/250/342/225/233/342/225/250/342/225/227/342/225/250/342/225/227/342/225/250/342/225/241/342/225/250/342/225/221/342/225/244/320/226/342/225/250/342/225/225/342/225/250/342/225/225.py +529 -396
- rupython//342/225/250/320/254/342/225/250/342/225/233/342/225/250/342/224/244/342/225/244/320/223/342/225/250/342/225/227/342/225/250/342/225/225//342/225/250/320/256/342/225/244/320/227/342/225/250/342/225/241/342/225/244/320/220/342/225/250/342/225/241/342/225/250/342/224/244/342/225/244/320/234.py +177 -0
- rupython//342/225/250/320/254/342/225/250/342/225/233/342/225/250/342/224/244/342/225/244/320/223/342/225/250/342/225/227/342/225/250/342/225/225//342/225/250/320/257/342/225/250/342/225/233/342/225/244/320/222/342/225/250/342/225/233/342/225/250/342/225/221/342/225/250/342/225/225.py +273 -0
- rupython//342/225/250/320/254/342/225/250/342/225/233/342/225/250/342/224/244/342/225/244/320/223/342/225/250/342/225/227/342/225/250/342/225/225//342/225/250/320/260/342/225/250/342/225/241/342/225/250/342/224/202/342/225/250/320/242/342/225/244/320/233/342/225/244/320/220.py +51 -51
- {rupython-1.2.11.dist-info → rupython-1.2.13.dist-info}/METADATA +4 -4
- rupython-1.2.13.dist-info/RECORD +19 -0
- rupython-1.2.11.dist-info/RECORD +0 -15
- {rupython-1.2.11.dist-info → rupython-1.2.13.dist-info}/LICENSE +0 -0
- {rupython-1.2.11.dist-info → rupython-1.2.13.dist-info}/WHEEL +0 -0
- {rupython-1.2.11.dist-info → rupython-1.2.13.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,177 @@
|
|
1
|
+
import queue
|
2
|
+
from rupython import __Общие_функции__
|
3
|
+
|
4
|
+
Очередь_пуста = queue.Empty
|
5
|
+
Очередь_полна = queue.Full
|
6
|
+
|
7
|
+
Словарь_параметров = {
|
8
|
+
'максимальный_размер': 'maxsize',
|
9
|
+
'элемент': 'item',
|
10
|
+
'блоковать': 'block',
|
11
|
+
'таймаут': 'timeout',
|
12
|
+
'приоритет': 'priority'
|
13
|
+
}
|
14
|
+
|
15
|
+
Словарь_склонений = {
|
16
|
+
'элемент': ['элемент', 'элемента', 'элементов'],
|
17
|
+
'задача': ['задача', 'задачи', 'задач']
|
18
|
+
}
|
19
|
+
|
20
|
+
class Очередь:
|
21
|
+
def __init__(экземпляр, максимальный_размер = 0):
|
22
|
+
kwargs = {'maxsize': максимальный_размер}
|
23
|
+
экземпляр._queue = queue.Queue(**kwargs)
|
24
|
+
|
25
|
+
def Добавить(экземпляр, элемент, блоковать = True, таймаут = None):
|
26
|
+
kwargs = {'item': элемент, 'block': блоковать}
|
27
|
+
if таймаут is not None:
|
28
|
+
kwargs['timeout'] = таймаут
|
29
|
+
экземпляр._queue.put(**kwargs)
|
30
|
+
|
31
|
+
def Добавить_без_блокования(экземпляр, элемент):
|
32
|
+
экземпляр._queue.put_nowait(элемент)
|
33
|
+
|
34
|
+
def Получить(экземпляр, блоковать = True, таймаут = None):
|
35
|
+
kwargs = {'block': блоковать}
|
36
|
+
if таймаут is not None:
|
37
|
+
kwargs['timeout'] = таймаут
|
38
|
+
return экземпляр._queue.get(**kwargs)
|
39
|
+
|
40
|
+
def Получить_без_блокования(экземпляр):
|
41
|
+
return экземпляр._queue.get_nowait()
|
42
|
+
|
43
|
+
def Задача_выполнена(экземпляр):
|
44
|
+
экземпляр._queue.task_done()
|
45
|
+
|
46
|
+
def Ждать_завершения(экземпляр):
|
47
|
+
экземпляр._queue.join()
|
48
|
+
|
49
|
+
def Пустая(экземпляр):
|
50
|
+
return экземпляр._queue.empty()
|
51
|
+
|
52
|
+
def Полная(экземпляр):
|
53
|
+
return экземпляр._queue.full()
|
54
|
+
|
55
|
+
def Размер(экземпляр):
|
56
|
+
return экземпляр._queue.qsize()
|
57
|
+
|
58
|
+
def __len__(экземпляр):
|
59
|
+
return экземпляр._queue.qsize()
|
60
|
+
|
61
|
+
def __str__(экземпляр):
|
62
|
+
размер = экземпляр.Размер()
|
63
|
+
return f"Очередь с {__Общие_функции__.Склонение_после_числительного(размер, Словарь_склонений['элемент'])}"
|
64
|
+
|
65
|
+
def В_строку_с_задачами(экземпляр):
|
66
|
+
размер = экземпляр.Размер()
|
67
|
+
return f"Очередь с {__Общие_функции__.Склонение_после_числительного(размер, Словарь_склонений['задача'])}"
|
68
|
+
|
69
|
+
class Стековая_очередь:
|
70
|
+
def __init__(экземпляр, максимальный_размер = 0):
|
71
|
+
kwargs = {'maxsize': максимальный_размер}
|
72
|
+
экземпляр._queue = queue.LifoQueue(**kwargs)
|
73
|
+
|
74
|
+
def Добавить(экземпляр, элемент, блоковать = True, таймаут = None):
|
75
|
+
kwargs = {'item': элемент, 'block': блоковать}
|
76
|
+
if таймаут is not None:
|
77
|
+
kwargs['timeout'] = таймаут
|
78
|
+
экземпляр._queue.put(**kwargs)
|
79
|
+
|
80
|
+
def Добавить_без_блокования(экземпляр, элемент):
|
81
|
+
экземпляр._queue.put_nowait(элемент)
|
82
|
+
|
83
|
+
def Получить(экземпляр, блоковать = True, таймаут = None):
|
84
|
+
kwargs = {'block': блоковать}
|
85
|
+
if таймаут is not None:
|
86
|
+
kwargs['timeout'] = таймаут
|
87
|
+
return экземпляр._queue.get(**kwargs)
|
88
|
+
|
89
|
+
def Получить_без_блокования(экземпляр):
|
90
|
+
return экземпляр._queue.get_nowait()
|
91
|
+
|
92
|
+
def Задача_выполнена(экземпляр):
|
93
|
+
экземпляр._queue.task_done()
|
94
|
+
|
95
|
+
def Ждать_завершения(экземпляр):
|
96
|
+
экземпляр._queue.join()
|
97
|
+
|
98
|
+
def Пустая(экземпляр):
|
99
|
+
return экземпляр._queue.empty()
|
100
|
+
|
101
|
+
def Полная(экземпляр):
|
102
|
+
return экземпляр._queue.full()
|
103
|
+
|
104
|
+
def Размер(экземпляр):
|
105
|
+
return экземпляр._queue.qsize()
|
106
|
+
|
107
|
+
def __len__(экземпляр):
|
108
|
+
return экземпляр._queue.qsize()
|
109
|
+
|
110
|
+
def __str__(экземпляр):
|
111
|
+
размер = экземпляр.Размер()
|
112
|
+
return f"Стековая_очередь с {__Общие_функции__.Склонение_после_числительного(размер, Словарь_склонений['элемент'])}"
|
113
|
+
|
114
|
+
def В_строку_с_задачами(экземпляр):
|
115
|
+
размер = экземпляр.Размер()
|
116
|
+
return f"Стековая_очередь с {__Общие_функции__.Склонение_после_числительного(размер, Словарь_склонений['задача'])}"
|
117
|
+
|
118
|
+
class Приоритетная_очередь:
|
119
|
+
def __init__(экземпляр, максимальный_размер = 0):
|
120
|
+
kwargs = {'maxsize': максимальный_размер}
|
121
|
+
экземпляр._queue = queue.PriorityQueue(**kwargs)
|
122
|
+
|
123
|
+
def Добавить(экземпляр, элемент, приоритет, блоковать = True, таймаут = None):
|
124
|
+
kwargs = {'item': (приоритет, элемент), 'block': блоковать}
|
125
|
+
if таймаут is not None:
|
126
|
+
kwargs['timeout'] = таймаут
|
127
|
+
экземпляр._queue.put(**kwargs)
|
128
|
+
|
129
|
+
def Добавить_без_блокования(экземпляр, элемент, приоритет):
|
130
|
+
экземпляр._queue.put_nowait((приоритет, элемент))
|
131
|
+
|
132
|
+
def Получить(экземпляр, блоковать = True, таймаут = None):
|
133
|
+
kwargs = {'block': блоковать}
|
134
|
+
if таймаут is not None:
|
135
|
+
kwargs['timeout'] = таймаут
|
136
|
+
приоритет, элемент = экземпляр._queue.get(**kwargs)
|
137
|
+
return элемент
|
138
|
+
|
139
|
+
def Получить_с_приоритетом(экземпляр, блоковать = True, таймаут = None):
|
140
|
+
kwargs = {'block': блоковать}
|
141
|
+
if таймаут is not None:
|
142
|
+
kwargs['timeout'] = таймаут
|
143
|
+
return экземпляр._queue.get(**kwargs)
|
144
|
+
|
145
|
+
def Получить_без_блокования(экземпляр):
|
146
|
+
приоритет, элемент = экземпляр._queue.get_nowait()
|
147
|
+
return элемент
|
148
|
+
|
149
|
+
def Получить_без_блокования_с_приоритетом(экземпляр):
|
150
|
+
"""Возвращает кортеж (приоритет, элемент)."""
|
151
|
+
return экземпляр._queue.get_nowait()
|
152
|
+
|
153
|
+
def Задача_выполнена(экземпляр):
|
154
|
+
экземпляр._queue.task_done()
|
155
|
+
|
156
|
+
def Ждать_завершения(экземпляр):
|
157
|
+
экземпляр._queue.join()
|
158
|
+
|
159
|
+
def Пустая(экземпляр):
|
160
|
+
return экземпляр._queue.empty()
|
161
|
+
|
162
|
+
def Полная(экземпляр):
|
163
|
+
return экземпляр._queue.full()
|
164
|
+
|
165
|
+
def Размер(экземпляр):
|
166
|
+
return экземпляр._queue.qsize()
|
167
|
+
|
168
|
+
def __len__(экземпляр):
|
169
|
+
return экземпляр._queue.qsize()
|
170
|
+
|
171
|
+
def __str__(экземпляр):
|
172
|
+
размер = экземпляр.Размер()
|
173
|
+
return f"Приоритетная_очередь с {__Общие_функции__.Склонение_после_числительного(размер, Словарь_склонений['элемент'])}"
|
174
|
+
|
175
|
+
def В_строку_с_задачами(экземпляр):
|
176
|
+
размер = экземпляр.Размер()
|
177
|
+
return f"Приоритетная_очередь с {__Общие_функции__.Склонение_после_числительного(размер, Словарь_склонений['задача'])}"
|
@@ -0,0 +1,273 @@
|
|
1
|
+
import threading
|
2
|
+
from rupython import __Общие_функции__
|
3
|
+
|
4
|
+
Ошибка_потока = threading.ThreadError
|
5
|
+
|
6
|
+
Словарь_параметров = {
|
7
|
+
'цель': 'target',
|
8
|
+
'имя': 'name',
|
9
|
+
'аргументы': 'args',
|
10
|
+
'именовАргументы': 'kwargs',
|
11
|
+
'после_окончания': 'daemon',
|
12
|
+
'время_ожидания': 'timeout',
|
13
|
+
'количество': 'count',
|
14
|
+
'действие': 'action',
|
15
|
+
'блоковать': 'block',
|
16
|
+
'обратный_вызов': 'callback',
|
17
|
+
'аргументыОбрВыз': 'callback_args',
|
18
|
+
'именовАргументыОбрВыз': 'callback_kwargs',
|
19
|
+
'интервал': 'interval'
|
20
|
+
}
|
21
|
+
|
22
|
+
Словарь_склонений = {
|
23
|
+
'поток': ['поток', 'потока', 'потоков'],
|
24
|
+
'ресурс': ['ресурс', 'ресурса', 'ресурсов'],
|
25
|
+
'участник': ['участник', 'участника', 'участников']
|
26
|
+
}
|
27
|
+
|
28
|
+
class Поток:
|
29
|
+
def __init__(экземпляр, цель = None, имя = None, аргументы = (), именовАргументы = None, после_окончания = None):
|
30
|
+
ИА = {}
|
31
|
+
if цель is not None:
|
32
|
+
ИА['target'] = цель
|
33
|
+
if имя is not None:
|
34
|
+
ИА['name'] = имя
|
35
|
+
if аргументы:
|
36
|
+
ИА['args'] = аргументы
|
37
|
+
if именовАргументы is not None:
|
38
|
+
ИА['kwargs'] = именовАргументы
|
39
|
+
if после_окончания is not None:
|
40
|
+
ИА['daemon'] = после_окончания
|
41
|
+
экземпляр._thread = threading.Thread(**ИА)
|
42
|
+
|
43
|
+
def Начать(экземпляр):
|
44
|
+
экземпляр._thread.start()
|
45
|
+
|
46
|
+
def Ждать(экземпляр, время_ожидания = None):
|
47
|
+
ИА = {}
|
48
|
+
if время_ожидания is not None:
|
49
|
+
ИА['timeout'] = время_ожидания
|
50
|
+
экземпляр._thread.join(**kwargs)
|
51
|
+
|
52
|
+
def Живой(экземпляр):
|
53
|
+
return экземпляр._thread.is_alive()
|
54
|
+
|
55
|
+
def Получить_имя(экземпляр):
|
56
|
+
return экземпляр._thread.getName()
|
57
|
+
|
58
|
+
def Установить_имя(экземпляр, имя):
|
59
|
+
экземпляр._thread.setName(имя)
|
60
|
+
|
61
|
+
def Получить_идентификатор(экземпляр):
|
62
|
+
return экземпляр._thread.ident
|
63
|
+
|
64
|
+
def После_окончания(экземпляр):
|
65
|
+
return экземпляр._thread.daemon
|
66
|
+
|
67
|
+
def Установить_после_окончания(экземпляр, после_окончания):
|
68
|
+
экземпляр._thread.daemon = после_окончания
|
69
|
+
|
70
|
+
def __str__(экземпляр):
|
71
|
+
return f"Поток(имя={экземпляр.Получить_имя()}, живой={экземпляр.Живой()})"
|
72
|
+
|
73
|
+
class Блокование:
|
74
|
+
def __init__(экземпляр):
|
75
|
+
экземпляр._lock = threading.Lock()
|
76
|
+
|
77
|
+
def Захватить(экземпляр, блоковать = True, время_ожидания = None):
|
78
|
+
ИА = {'block': блоковать}
|
79
|
+
if время_ожидания is not None:
|
80
|
+
ИА['timeout'] = время_ожидания
|
81
|
+
return экземпляр._lock.acquire(**ИА)
|
82
|
+
|
83
|
+
def Освободить(экземпляр):
|
84
|
+
экземпляр._lock.release()
|
85
|
+
|
86
|
+
def Захвачено(экземпляр):
|
87
|
+
return экземпляр._lock.locked()
|
88
|
+
|
89
|
+
def __enter__(экземпляр):
|
90
|
+
экземпляр.Захватить()
|
91
|
+
return экземпляр
|
92
|
+
|
93
|
+
def __exit__(экземпляр, тип_исключения, значение_исключения, трассировка):
|
94
|
+
экземпляр.Освободить()
|
95
|
+
|
96
|
+
def __str__(экземпляр):
|
97
|
+
return f"Блокование(захвачено={экземпляр.Захвачено()})"
|
98
|
+
|
99
|
+
class Повторное_блокование:
|
100
|
+
def __init__(экземпляр):
|
101
|
+
экземпляр._rlock = threading.RLock()
|
102
|
+
|
103
|
+
def Захватить(экземпляр, блоковать = True, время_ожидания = None):
|
104
|
+
ИА = {'block': блоковать}
|
105
|
+
if время_ожидания is not None:
|
106
|
+
ИА['timeout'] = время_ожидания
|
107
|
+
return экземпляр._rlock.acquire(**ИА)
|
108
|
+
|
109
|
+
def Освободить(экземпляр):
|
110
|
+
экземпляр._rlock.release()
|
111
|
+
|
112
|
+
def __enter__(экземпляр):
|
113
|
+
экземпляр.Захватить()
|
114
|
+
return экземпляр
|
115
|
+
|
116
|
+
def __exit__(экземпляр, тип_исключения, значение_исключения, трассировка):
|
117
|
+
экземпляр.Освободить()
|
118
|
+
|
119
|
+
def __str__(экземпляр):
|
120
|
+
return f"Повторное_блокование(владелец={экземпляр._rlock._owner}, счётчик={экземпляр._rlock._count})"
|
121
|
+
|
122
|
+
class Семафор:
|
123
|
+
def __init__(экземпляр, количество = 1):
|
124
|
+
ИА = {'value': количество}
|
125
|
+
экземпляр._semaphore = threading.Semaphore(**ИА)
|
126
|
+
|
127
|
+
def Захватить(экземпляр, блоковать = True, время_ожидания = None):
|
128
|
+
ИА = {'block': блоковать}
|
129
|
+
if время_ожидания is not None:
|
130
|
+
ИА['timeout'] = время_ожидания
|
131
|
+
return экземпляр._semaphore.acquire(**ИА)
|
132
|
+
|
133
|
+
def Освободить(экземпляр):
|
134
|
+
экземпляр._semaphore.release()
|
135
|
+
|
136
|
+
def __enter__(экземпляр):
|
137
|
+
экземпляр.Захватить()
|
138
|
+
return экземпляр
|
139
|
+
|
140
|
+
def __exit__(экземпляр, тип_исключения, значение_исключения, трассировка):
|
141
|
+
экземпляр.Освободить()
|
142
|
+
|
143
|
+
def __str__(экземпляр):
|
144
|
+
return f"Семафор(ресурсов={экземпляр._semaphore._value})"
|
145
|
+
|
146
|
+
class Ограниченный_семафор(Семафор):
|
147
|
+
def __init__(экземпляр, количество = 1):
|
148
|
+
ИА = {'value': количество}
|
149
|
+
экземпляр._semaphore = threading.BoundedSemaphore(**ИА)
|
150
|
+
|
151
|
+
class Событие:
|
152
|
+
def __init__(экземпляр):
|
153
|
+
экземпляр._event = threading.Event()
|
154
|
+
|
155
|
+
def Установить(экземпляр):
|
156
|
+
экземпляр._event.set()
|
157
|
+
|
158
|
+
def Сбросить(экземпляр):
|
159
|
+
экземпляр._event.clear()
|
160
|
+
|
161
|
+
def Активно(экземпляр):
|
162
|
+
return экземпляр._event.is_set()
|
163
|
+
|
164
|
+
def Ждать(экземпляр, время_ожидания = None):
|
165
|
+
ИА = {}
|
166
|
+
if время_ожидания is not None:
|
167
|
+
ИА['timeout'] = время_ожидания
|
168
|
+
return экземпляр._event.wait(**ИА)
|
169
|
+
|
170
|
+
def __str__(экземпляр):
|
171
|
+
return f"Событие(активно={экземпляр.Активно()})"
|
172
|
+
|
173
|
+
class Условие:
|
174
|
+
def __init__(экземпляр, блокование = None):
|
175
|
+
ИА = {}
|
176
|
+
if блокование is not None:
|
177
|
+
ИА['lock'] = блокование._lock if isinstance(блокование, (Блокование, Повторное_блокование)) else блокование
|
178
|
+
экземпляр._condition = threading.Condition(**ИА)
|
179
|
+
|
180
|
+
def Захватить(экземпляр):
|
181
|
+
return экземпляр._condition.acquire()
|
182
|
+
|
183
|
+
def Освободить(экземпляр):
|
184
|
+
экземпляр._condition.release()
|
185
|
+
|
186
|
+
def Ждать(экземпляр, время_ожидания = None):
|
187
|
+
ИА = {}
|
188
|
+
if время_ожидания is not None:
|
189
|
+
ИА['timeout'] = время_ожидания
|
190
|
+
return экземпляр._condition.wait(**ИА)
|
191
|
+
|
192
|
+
def Уведомить(экземпляр, количество = 1):
|
193
|
+
ИА = {'n': количество}
|
194
|
+
экземпляр._condition.notify(**ИА)
|
195
|
+
|
196
|
+
def Уведомить_все(экземпляр):
|
197
|
+
экземпляр._condition.notify_all()
|
198
|
+
|
199
|
+
def __enter__(экземпляр):
|
200
|
+
экземпляр.Захватить()
|
201
|
+
return экземпляр
|
202
|
+
|
203
|
+
def __exit__(экземпляр, тип_исключения, значение_исключения, трассировка):
|
204
|
+
экземпляр.Освободить()
|
205
|
+
|
206
|
+
def __str__(экземпляр):
|
207
|
+
return f"Условие(захвачено={экземпляр._condition._is_owned()})"
|
208
|
+
|
209
|
+
class Барьер:
|
210
|
+
def __init__(экземпляр, количество, действие = None, время_ожидания = None):
|
211
|
+
ИА = {'parties': количество}
|
212
|
+
if действие is not None:
|
213
|
+
ИА['action'] = действие
|
214
|
+
if время_ожидания is not None:
|
215
|
+
ИА['timeout'] = время_ожидания
|
216
|
+
экземпляр._barrier = threading.Barrier(**ИА)
|
217
|
+
|
218
|
+
def Ждать(экземпляр, время_ожидания = None):
|
219
|
+
ИА = {}
|
220
|
+
if время_ожидания is not None:
|
221
|
+
ИА['timeout'] = время_ожидания
|
222
|
+
return экземпляр._barrier.wait(**ИА)
|
223
|
+
|
224
|
+
def Сбросить(экземпляр):
|
225
|
+
экземпляр._barrier.reset()
|
226
|
+
|
227
|
+
def Прервать(экземпляр):
|
228
|
+
экземпляр._barrier.abort()
|
229
|
+
|
230
|
+
def Количество_участников(экземпляр):
|
231
|
+
return экземпляр._barrier.parties
|
232
|
+
|
233
|
+
def Количество_ожидающих(экземпляр):
|
234
|
+
return экземпляр._barrier.n_waiting
|
235
|
+
|
236
|
+
def Сломан(экземпляр):
|
237
|
+
return экземпляр._barrier.broken
|
238
|
+
|
239
|
+
def __str__(экземпляр):
|
240
|
+
return f"Барьер({__Общие_функции__.Склонение_после_числительного(экземпляр.Количество_ожидающих(), Словарь_склонений['участник'])} из {экземпляр.Количество_участников()})"
|
241
|
+
|
242
|
+
class Таймер(Поток):
|
243
|
+
def __init__(экземпляр, интервал, цель, аргументы = (), именовАргументы = None, обратный_вызов = None, аргументыОбрВыз = (), именовАргументыОбрВыз = None):
|
244
|
+
ИА = {'interval': интервал, 'function': цель}
|
245
|
+
if аргументы:
|
246
|
+
ИА['args'] = аргументы
|
247
|
+
if именовАргументы is not None:
|
248
|
+
ИА['kwargs'] = именовАргументы
|
249
|
+
экземпляр._timer = threading.Timer(**ИА)
|
250
|
+
экземпляр._callback = обратный_вызов
|
251
|
+
экземпляр._callback_args = аргументыОбрВыз
|
252
|
+
экземпляр._callback_kwargs = именовАргументыОбрВыз or {}
|
253
|
+
|
254
|
+
def Отменить(экземпляр):
|
255
|
+
экземпляр._timer.cancel()
|
256
|
+
|
257
|
+
def Завершён(экземпляр):
|
258
|
+
return экземпляр._timer.finished.is_set()
|
259
|
+
|
260
|
+
def __str__(экземпляр):
|
261
|
+
return f"Таймер(интервал={экземпляр._timer.interval}, завершён={экземпляр.Завершён()})"
|
262
|
+
|
263
|
+
def Текущий_поток():
|
264
|
+
return Поток(цель = lambda: None, имя = threading.current_thread().getName())
|
265
|
+
|
266
|
+
def Количество_активных_потоков():
|
267
|
+
return threading.active_count()
|
268
|
+
|
269
|
+
def Перечислить_потоки():
|
270
|
+
return [Поток(цель = lambda: None, имя = поток.getName()) for поток in threading.enumerate()]
|
271
|
+
|
272
|
+
def Получить_основной_поток():
|
273
|
+
return Поток(цель = lambda: None, имя = threading.main_thread().getName())
|
@@ -12,89 +12,89 @@ from rupython import __Общие_функции__
|
|
12
12
|
Развёрнутое = X = re.VERBOSE
|
13
13
|
|
14
14
|
class Шаблон:
|
15
|
-
def __init__(
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
def Поиск(
|
15
|
+
def __init__(экземпляр, объект):
|
16
|
+
экземпляр.объект = объект
|
17
|
+
экземпляр.флаги = объект.flags
|
18
|
+
экземпляр.число_групп = объект.groups
|
19
|
+
экземпляр.номераНазвГр = объект.groupindex
|
20
|
+
экземпляр.шаблон = объект.pattern
|
21
|
+
|
22
|
+
def Поиск(экземпляр, *ПА, **ИА):
|
23
23
|
ИА = __Общие_функции__.Заменить_ключи_в_словаре(ИА, \
|
24
24
|
{ 'строка': 'string', 'нач_поз': 'pos', 'кон_поз': 'endpos' })
|
25
|
-
return
|
25
|
+
return экземпляр.объект.search(*ПА, **ИА)
|
26
26
|
|
27
|
-
def СовпадНач(
|
27
|
+
def СовпадНач(экземпляр, *ПА, **ИА):
|
28
28
|
ИА = __Общие_функции__.Заменить_ключи_в_словаре(ИА, \
|
29
29
|
{ 'строка': 'string', 'нач_поз': 'pos', 'кон_поз': 'endpos' })
|
30
|
-
return
|
30
|
+
return экземпляр.объект.match(*ПА, **ИА)
|
31
31
|
|
32
|
-
def ПолнСоотв(
|
32
|
+
def ПолнСоотв(экземпляр, *ПА, **ИА):
|
33
33
|
ИА = __Общие_функции__.Заменить_ключи_в_словаре(ИА, \
|
34
34
|
{ 'строка': 'string', 'нач_поз': 'pos', 'кон_поз': 'endpos' })
|
35
|
-
return
|
35
|
+
return экземпляр.объект.fullmatch(*ПА, **ИА)
|
36
36
|
|
37
|
-
def Разбить(
|
37
|
+
def Разбить(экземпляр, *ПА, **ИА):
|
38
38
|
ИА = __Общие_функции__.Заменить_ключи_в_словаре(ИА, \
|
39
39
|
{ 'строка': 'string', 'макс_делений': 'maxsplit' })
|
40
|
-
return
|
40
|
+
return экземпляр.объект.split(*ПА, **ИА)
|
41
41
|
|
42
|
-
def НайтиВсё(
|
42
|
+
def НайтиВсё(экземпляр, *ПА, **ИА):
|
43
43
|
ИА = __Общие_функции__.Заменить_ключи_в_словаре(ИА, \
|
44
44
|
{ 'строка': 'string', 'нач_поз': 'pos', 'кон_поз': 'endpos' })
|
45
|
-
return
|
45
|
+
return экземпляр.объект.findall(*ПА, **ИА)
|
46
46
|
|
47
|
-
def ИскатьПеречисл(
|
47
|
+
def ИскатьПеречисл(экземпляр, *ПА, **ИА):
|
48
48
|
ИА = __Общие_функции__.Заменить_ключи_в_словаре(ИА, \
|
49
49
|
{ 'строка': 'string', 'нач_поз': 'pos', 'кон_поз': 'endpos' })
|
50
|
-
return
|
50
|
+
return экземпляр.объект.finditer(*ПА, **ИА)
|
51
51
|
|
52
|
-
def Заменить(
|
52
|
+
def Заменить(экземпляр, *ПА, **ИА):
|
53
53
|
ИА = __Общие_функции__.Заменить_ключи_в_словаре(ИА, \
|
54
54
|
{ 'замена': 'repl', 'строка': 'string', 'количество': 'count' })
|
55
|
-
return
|
55
|
+
return экземпляр.объект.sub(*ПА, **ИА)
|
56
56
|
|
57
|
-
def ЗаменитьСч(
|
57
|
+
def ЗаменитьСч(экземпляр, *ПА, **ИА):
|
58
58
|
ИА = __Общие_функции__.Заменить_ключи_в_словаре(ИА, \
|
59
59
|
{ 'замена': 'repl', 'строка': 'string', 'количество': 'count' })
|
60
|
-
return
|
60
|
+
return экземпляр.объект.subn(*ПА, **ИА)
|
61
61
|
|
62
62
|
|
63
63
|
class Соответствие:
|
64
|
-
def __init__(
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
def Развернуть(
|
74
|
-
def Группа(
|
75
|
-
def __getitem__(
|
76
|
-
|
77
|
-
def Группы(
|
64
|
+
def __init__(экземпляр, объект):
|
65
|
+
экземпляр.объект = объект
|
66
|
+
экземпляр.нач_поз = объект.pos
|
67
|
+
экземпляр.кон_поз = объект.endpos
|
68
|
+
экземпляр.послИндекс = объект.lastindex
|
69
|
+
экземпляр.послГруппа = объект.lastgroup
|
70
|
+
экземпляр.регВыр = объект.re
|
71
|
+
экземпляр.строка = объект.string
|
72
|
+
|
73
|
+
def Развернуть(экземпляр, шаблон): return экземпляр.объект.expand(шаблон)
|
74
|
+
def Группа(экземпляр, *группы): return экземпляр.объект.group(*группы)
|
75
|
+
def __getitem__(экземпляр, индекс): return объект[индекс]
|
76
|
+
|
77
|
+
def Группы(экземпляр, *ПА, **ИА):
|
78
78
|
ИА = __Общие_функции__.Заменить_ключи_в_словаре(ИА, { 'по_умолчанию': 'default' })
|
79
|
-
return
|
79
|
+
return экземпляр.объект.groups(*ПА, **ИА)
|
80
80
|
|
81
|
-
def ИменовГруппы(
|
81
|
+
def ИменовГруппы(экземпляр, *ПА, **ИА):
|
82
82
|
ИА = __Общие_функции__.Заменить_ключи_в_словаре(ИА, { 'по_умолчанию': 'default' })
|
83
|
-
return
|
83
|
+
return экземпляр.объект.groupdict(*ПА, **ИА)
|
84
84
|
|
85
|
-
def Начало(
|
86
|
-
def Конец(
|
85
|
+
def Начало(экземпляр, *группа): return экземпляр.объект.start(*группа)
|
86
|
+
def Конец(экземпляр, *группа): return экземпляр.объект.end(*группа)
|
87
87
|
|
88
88
|
Флаги = re.RegexFlag
|
89
89
|
|
90
|
-
def Создать(шаблон, флаги = 0): рез = re.compile(шаблон, flags
|
91
|
-
def Поиск(шаблон, строка, флаги = 0): return re.search(шаблон, строка, flags
|
92
|
-
def СовпадНач(шаблон, строка, флаги = 0): return re.match(шаблон, строка, flags
|
93
|
-
def ПолнСоотв(шаблон, строка, флаги = 0): return re.fullmatch(шаблон, строка, flags
|
94
|
-
def Разбить(шаблон, строка, макс_делений = 0, флаги = 0): return re.split(шаблон, строка, maxsplit
|
95
|
-
def НайтиВсё(шаблон, строка, флаги = 0): return re.findall(шаблон, строка, flags
|
96
|
-
def ИскатьПеречисл(шаблон, строка, флаги = 0): return re.finditer(шаблон, строка, flags
|
97
|
-
def Заменить(шаблон, замена, количество = 0, флаги = 0): return re.sub(шаблон, замена, строка, count
|
98
|
-
def ЗаменитьСч(шаблон, замена, количество = 0, флаги = 0): return re.sub(шаблон, замена, строка, count
|
90
|
+
def Создать(шаблон, флаги = 0): рез = re.compile(шаблон, flags = флаги); return Шаблон(re.compile(рез)) if type(рез) == re.Pattern else рез
|
91
|
+
def Поиск(шаблон, строка, флаги = 0): return re.search(шаблон, строка, flags = флаги)
|
92
|
+
def СовпадНач(шаблон, строка, флаги = 0): return re.match(шаблон, строка, flags = флаги)
|
93
|
+
def ПолнСоотв(шаблон, строка, флаги = 0): return re.fullmatch(шаблон, строка, flags = флаги)
|
94
|
+
def Разбить(шаблон, строка, макс_делений = 0, флаги = 0): return re.split(шаблон, строка, maxsplit = макс_делений, flags = флаги)
|
95
|
+
def НайтиВсё(шаблон, строка, флаги = 0): return re.findall(шаблон, строка, flags = флаги)
|
96
|
+
def ИскатьПеречисл(шаблон, строка, флаги = 0): return re.finditer(шаблон, строка, flags = флаги)
|
97
|
+
def Заменить(шаблон, замена, количество = 0, флаги = 0): return re.sub(шаблон, замена, строка, count = количество, flags = флаги)
|
98
|
+
def ЗаменитьСч(шаблон, замена, количество = 0, флаги = 0): return re.sub(шаблон, замена, строка, count = количество, flags = флаги)
|
99
99
|
def ЭкранШабл(шаблон): return re.escape(шаблон)
|
100
100
|
def ОчиститьКэш(): return re.purge()
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: rupython
|
3
|
-
Version: 1.2.
|
3
|
+
Version: 1.2.13
|
4
4
|
Summary: Исполнитель кода Русского Питона
|
5
5
|
Description-Content-Type: text/markdown
|
6
6
|
License-File: LICENSE
|
@@ -154,8 +154,8 @@ k = l это m и m это не n
|
|
154
154
|
##### Класс
|
155
155
|
```
|
156
156
|
Класс Пример(Другой_класс):
|
157
|
-
Функция __Подготовка__(
|
158
|
-
|
157
|
+
Функция __Подготовка__(экземпляр, перем = 0):
|
158
|
+
экземпляр.зн = перем
|
159
159
|
|
160
160
|
Объект = Пример(1)
|
161
161
|
```
|
@@ -240,7 +240,7 @@ x = 0
|
|
240
240
|
|
241
241
|
##### Контекстный менеджер
|
242
242
|
```
|
243
|
-
|
243
|
+
Используя Открыть('Файл.дан', 'r') как файл:
|
244
244
|
Пока стр := файл.Читать_строку():
|
245
245
|
Вывести(стр.Удалить_по_бокам())
|
246
246
|
```
|
@@ -0,0 +1,19 @@
|
|
1
|
+
rupython/__main__.py,sha256=wfmjyJhg6iQN1_9Hl6tIu6mKHO95xP2ibVcDdIIEXjE,1256
|
2
|
+
rupython/__Заголовочный_код__.py,sha256=rWwsi5zSDUKinOeF6lLN-0MVYDcKclrKlq-eEw8Rpz0,13489
|
3
|
+
rupython/__Общие_функции__.py,sha256=MH9QLcXqeFmpOS5_N8P5wA5eCYutlHRc7YUatn3CUIk,1255
|
4
|
+
rupython/Преобразователь.py,sha256=ZRTJnKOLG-ckVifnKQQwAKyDCKo4j8qHbyIlwOAbTD4,48431
|
5
|
+
rupython/Модули/Асинхр.py,sha256=sPQUgbS_kXj-Gyn2YCjXNCUqAy8aUW2-P6gO5e7f6Cc,9925
|
6
|
+
rupython/Модули/БД.py,sha256=KNgVf91n_jZcrU8sLNnvsa2W0NCsJcPSWr7uM2lmUpg,29685
|
7
|
+
rupython/Модули/ДатаВремя.py,sha256=Ec9YyY1jb-R9uyXrrDNfaTqBQVv98_GPn29OY8dUkj8,27523
|
8
|
+
rupython/Модули/Коллекции.py,sha256=GAqmEjrPu5BO81S5_4JvdWfhFyjLHhkCmfEmlo0NdyI,25770
|
9
|
+
rupython/Модули/Куча.py,sha256=h70utcxeF0Mi3X7OF5PlF_5z-98kc7qu_RQHFyL6lI8,3529
|
10
|
+
rupython/Модули/Матем.py,sha256=d8ekm7GJreu7LJ9KmAKcTOciIUQ-VBI567BfK_QeLSc,3587
|
11
|
+
rupython/Модули/Очередь.py,sha256=9j50lXeBW5Jme2BSpJg599Vc5zmYfIE-C8awPN2HUZo,8502
|
12
|
+
rupython/Модули/Потоки.py,sha256=am6hWxcrCx4Vx_FFPMIIhSl_ShWSV5vjW5deXV6EYTU,12342
|
13
|
+
rupython/Модули/РегВыр.py,sha256=OWgYtgBDtHsEHUOAsGx7K0UGq92sumSqEyf-sVpICjw,6709
|
14
|
+
rupython/Модули/Случ.py,sha256=foIuQo2QZ5z0iyxp9fn4NaunSx96vYzC2pRjwaT2FD8,2723
|
15
|
+
rupython-1.2.13.dist-info/LICENSE,sha256=vTQDUsS-xxBMZEA2avkNBOGb58hRM-WHr8Getk-XTqQ,11780
|
16
|
+
rupython-1.2.13.dist-info/METADATA,sha256=Sj4-DXKZHFtvGWn16c5zkDLUj_AxxsY3J06X-Lhergc,30185
|
17
|
+
rupython-1.2.13.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
|
18
|
+
rupython-1.2.13.dist-info/top_level.txt,sha256=GtXaS8JTsBm5hpQxxtQlrxK6rExvSAK_Cp44FrY4210,9
|
19
|
+
rupython-1.2.13.dist-info/RECORD,,
|
rupython-1.2.11.dist-info/RECORD
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
rupython/__main__.py,sha256=wfmjyJhg6iQN1_9Hl6tIu6mKHO95xP2ibVcDdIIEXjE,1256
|
2
|
-
rupython/__Заголовочный_код__.py,sha256=VWghfQc6dv9lwIeQvJotpdOlBtHZeN00NBeL4RdWloA,10998
|
3
|
-
rupython/__Общие_функции__.py,sha256=eiDtxw8MVlZ8rZZC2N-NkYqmf2F-XCczHubUnzVKWJA,856
|
4
|
-
rupython/Преобразователь.py,sha256=ZRTJnKOLG-ckVifnKQQwAKyDCKo4j8qHbyIlwOAbTD4,48431
|
5
|
-
rupython/Модули/БД.py,sha256=QA-Z0VPXliFuyHFvJv0hKGhanF9XWNjrwR70sGgfk5c,30310
|
6
|
-
rupython/Модули/ДатаВремя.py,sha256=YdpACxtHXt57zV7uYpZJZeH3T4bMd6orud-Y34DqWTI,25087
|
7
|
-
rupython/Модули/Коллекции.py,sha256=pJ1L38_8lF9VRvXQhUPPGu49tJkYlpR_3sC-ruxYsCU,16830
|
8
|
-
rupython/Модули/Матем.py,sha256=d8ekm7GJreu7LJ9KmAKcTOciIUQ-VBI567BfK_QeLSc,3587
|
9
|
-
rupython/Модули/РегВыр.py,sha256=T3yxVP-B5AwAzbUTjWpog3HCzRTGLZ58CEQpfA-0dsY,6341
|
10
|
-
rupython/Модули/Случ.py,sha256=foIuQo2QZ5z0iyxp9fn4NaunSx96vYzC2pRjwaT2FD8,2723
|
11
|
-
rupython-1.2.11.dist-info/LICENSE,sha256=vTQDUsS-xxBMZEA2avkNBOGb58hRM-WHr8Getk-XTqQ,11780
|
12
|
-
rupython-1.2.11.dist-info/METADATA,sha256=AcNdWamkDB-I2YrOnkIN-F1TqNcQNXzEdaI_joFLjrQ,30171
|
13
|
-
rupython-1.2.11.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
|
14
|
-
rupython-1.2.11.dist-info/top_level.txt,sha256=GtXaS8JTsBm5hpQxxtQlrxK6rExvSAK_Cp44FrY4210,9
|
15
|
-
rupython-1.2.11.dist-info/RECORD,,
|