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
   78   79   80   81   82   83   84   85   86   87   88