Page 83 - 6734
P. 83
s=sys.stdin.read().decode("string_escape") #
перетворити з рядкового літералу Python
data = pickle.loads(s) # перетворити в список
data.append('D') # додати дані
s=pickle.dumps(data) # серіалізувати список у рядок
s=s.encode("string_escape") # перетворити в рядковий
літерал Python (без "\n")
sys.stdout.write(s) # записати в stdout
thread – створення багатьох потоків керування
Потоком виконання називають частину процесу, яка може
виконуватись паралельно з іншими потоками цього процесу і
використовувати спільні з ними ресурси. Синхронізація потоків і
процесів – це механізм, який перешкоджає одночасному їхньому
зверненню до спільно використовуваних ресурсів. Модуль thread
забезпечує низькорівневі (на відміну від threading) примітиви для
роботи з багатьма потоками. У прикладі створюються 4 потоки, які
виконують функцію f. Звернення потоків до спільного списку A
синхронізовано за допомогою простого об’єкта блокування
allocate_lock. Нижче показані результати роботи програми з
цим об’єктом і без нього. Зауважте, що в CPython існує глобальне
блокування інтерпретатора Global Interpreter Lock (GIL), яке являє
собою механізм синхронізації потоків, що не дозволяє в один
момент часу виконуватись більше ніж одному потоку. Тому
застосовуйте модуль multiprocessing, якщо програмі потрібно
задіяти для обчислень кілька процесорів. А багатопотоковість
краще застосовувати у випадку багатьох одночасних задач
введення-виведення.
import thread,time
def f(i): # функція виконується в окремому потоці
mutex.acquire() # блокувати (лише один потік може
виконуватись в один і той самий момент часу)
A.append(i)
82