rupython 1.2.11__py3-none-any.whl → 1.2.12__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/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 +5 -20
- 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 +18 -5
- 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 +279 -146
- 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 +9 -9
- {rupython-1.2.11.dist-info → rupython-1.2.12.dist-info}/METADATA +2 -2
- rupython-1.2.12.dist-info/RECORD +19 -0
- rupython-1.2.11.dist-info/RECORD +0 -15
- {rupython-1.2.11.dist-info → rupython-1.2.12.dist-info}/LICENSE +0 -0
- {rupython-1.2.11.dist-info → rupython-1.2.12.dist-info}/WHEEL +0 -0
- {rupython-1.2.11.dist-info → rupython-1.2.12.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())
|
@@ -87,14 +87,14 @@ class Соответствие:
|
|
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.12
|
4
4
|
Summary: Исполнитель кода Русского Питона
|
5
5
|
Description-Content-Type: text/markdown
|
6
6
|
License-File: LICENSE
|
@@ -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=VWghfQc6dv9lwIeQvJotpdOlBtHZeN00NBeL4RdWloA,10998
|
3
|
+
rupython/__Общие_функции__.py,sha256=MH9QLcXqeFmpOS5_N8P5wA5eCYutlHRc7YUatn3CUIk,1255
|
4
|
+
rupython/Преобразователь.py,sha256=ZRTJnKOLG-ckVifnKQQwAKyDCKo4j8qHbyIlwOAbTD4,48431
|
5
|
+
rupython/Модули/Асинхр.py,sha256=Tzn_JzxhcfXTOEBxoaTTt6YmhkvKM92uSKmw6Kng-mE,9125
|
6
|
+
rupython/Модули/БД.py,sha256=_YMD2yLo9fmHqp7bodiqe8s6gSQN2sjFGoxwoKZ67dw,29237
|
7
|
+
rupython/Модули/ДатаВремя.py,sha256=8S1ss-Ow2gXDLMEBEE4jQmONJ1frwNotIS0jSuezYj0,25571
|
8
|
+
rupython/Модули/Коллекции.py,sha256=csJKFIEJhq_wW7o7eHEFbU4nXlfaGC9jzBxfClhM6Dg,23154
|
9
|
+
rupython/Модули/Куча.py,sha256=dhvdf0nhk3rX1jwvuXg02Z7AiqnDEi-62EYY4TNWm3M,3273
|
10
|
+
rupython/Модули/Матем.py,sha256=d8ekm7GJreu7LJ9KmAKcTOciIUQ-VBI567BfK_QeLSc,3587
|
11
|
+
rupython/Модули/Очередь.py,sha256=9-A2DOQe2m79EsysDOhup_IG3D2iLBdj7iTY6RO7L-s,7846
|
12
|
+
rupython/Модули/Потоки.py,sha256=2TwXkg-Vd0yDJPIt_PkfnDz01bsUsBICI0YvZDUPpgI,11342
|
13
|
+
rupython/Модули/РегВыр.py,sha256=lLUyF7AJoe0XPG2KdS2TlfOUEmcjxMqwyeVR7TQQHys,6365
|
14
|
+
rupython/Модули/Случ.py,sha256=foIuQo2QZ5z0iyxp9fn4NaunSx96vYzC2pRjwaT2FD8,2723
|
15
|
+
rupython-1.2.12.dist-info/LICENSE,sha256=vTQDUsS-xxBMZEA2avkNBOGb58hRM-WHr8Getk-XTqQ,11780
|
16
|
+
rupython-1.2.12.dist-info/METADATA,sha256=YnWjc3Vy_Hf8TfcV30DG5vIh70ubYKdiv4FTrxLk3jU,30169
|
17
|
+
rupython-1.2.12.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
|
18
|
+
rupython-1.2.12.dist-info/top_level.txt,sha256=GtXaS8JTsBm5hpQxxtQlrxK6rExvSAK_Cp44FrY4210,9
|
19
|
+
rupython-1.2.12.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,,
|
File without changes
|
File without changes
|
File without changes
|