Мы поможем в написании ваших работ!
ЗНАЕТЕ ЛИ ВЫ?
|
print "Процесс %s запрашивает ресурс %s" % (n, r)
Содержание книги
- From smtplib import SMTP connect = smtp('mx. Abcde. Ru') connect. Set_debuglevel(1)
- Учетные данные пользователя: Server = "pop. Server. Com" username = "user" userpassword = "secretword"
- Получает строку s с приветствиемPOP3-сервера
- Команда аналогичнаretr,но Загружает только заголовок и
- Функции для загрузки сетевых объектов
- n=1&n=3&n=4&button=%F0%D2%C9%D7%C5%D4
- def download(url, file): import urllib, time start_t = time.time()
- urlparse(url, scheme='', allow_fragments=1)
- authinfo.add_password('My page', 'localhost', 'user1', 'secret')
- Вызвать удаленную функцию print req.add(1, 3)
- from SimpleXMLRPCServer import SimpleXMLRPCServer
- Лекция#10:Работа с базой данных
- Работа с базой данных из python-приложения
- Поддерживаетdb-api 2. 0,а значит,переход на любую другую субд потребует минимальных изменений в вызове функции connect() и,возможно,использования более
- Следующий сценарий создаст таблицу в базе данных(в случае сsqliteзаботиться о создании базы данных не нужно:файл создастся автоматически. Для других баз данных
- c = db.connect(database="tvprogram") cu = c.cursor()
- ОРТ|Новости|Новости|9.15 10.02.2003 9.15|ОРТ|"НЕЖНЫЙ ЯД"|Сериал|10.15
- c = db.connect(database="tvprogram") cu = c.cursor()
- Для СУБДPostgreSQLнужно взять неPyGreSQL,аpsycopg,так как в первом есть
- Лекция#11:Многопоточные вычисления
- Поддержка многопоточности в языкеPythonдоступна через использование ряда модулей.В
- Пример многопоточной программы
- Thread(group, target, name, args, kwargs)
- print "Hello, world!"
- Замки позволяют ограничивать вход в некоторую область программы одним потоком. Замки могут потребоваться для обеспечения целостности структуры данных. Например,если для
- print "Процесс %s запрашивает ресурс %s" % (n, r)
- from threading import BoundedSemaphore maxconnections = 5
- Еще одним способом коммуникации между объектами являются события.Экземпляры
- notify() и notifyAll() другими потоками.Необязательный аргумент timeout
- quot;""Занесение нового элемента в контейнер и оповещение потоков"""
- quot;""Занесение нового элемента в контейнер и оповещение потоков"""
- Следующий пример иллюстрирует параллельность выполнения потоков,используя возможности библиотеки графических примитивов Tkinter(она входит в стандартную
- quot;""Выход из программы"""
- Параллельное программирование требует тщательной отработки взаимодействия между потоками управления.Некоторые участки кода необходимо ограждать от одновременного
- В лекции будет рассматриваться пакетtkinter,который по сути является оберткой дляtcl/tk - известного графического пакета для сценарного языка tcl. На примере этого
- Вхождение курсора в пределы виджета
- Focusin. Получение фокуса окном. Focusout. Keypress. Нажатие клавиши на клавиатуре. Keyrelease. Отжатие клавиши на клавиатуре. Выход курсора за пределы виджета. Motion. Движение мыши в пределах виджета. Mousewheel. Прокрутка колесика мыши. Reparent. Измен
- tk = Tk() # основное окно приложения
- Создание и конфигурирование виджета
- from Tkinter import * tk = Tk()
- При желании можно задать стилевые опции для всех виджетов сразу:с помощью метода tk_setpalette(). Помимо использованных выше свойств в этом методе можно
- from Tkinter import * import urllib
- from Tkinter import * tk = Tk()
- b[1, 3].pack(side=BOTTOM, fill=Y) b[1, 4].pack(side=BOTTOM, fill=BOTH)
- import Tkinter, Image, ImageTk
- start=0, extent=150, fill="blue")
- c.itemconfigure(CURRENT, fill=choice(colors))
- c = Canvas(tk, height=300, bg="white")
- Виджеты располагаются внутри другого виджета(например,рамки)в соответствии с набором правил.Этот набор правил реализуют менеджеры расположения,которых в
- Лекция#13:ИнтеграцияPythonс другими языками
import threading, time
resource = {'A': threading.Lock(), 'B': threading.Lock()}
def proc(n, rs): for r in rs:
print "Процесс %s запрашивает ресурс %s" % (n, r)
resource[r].acquire()
print "Процесс %s получил ресурс %s" % (n, r) time.sleep(1)
print "Процесс %s выполняется" % n for r in rs:
resource[r].release()
print "Процесс %s закончил выполнение" % n
p1 = threading.Thread(target=proc, name="t1", args=["1", "AB"])
p2 = threading.Thread(target=proc, name="t2", args=["2", "BA"]) p1.start()
p2.start()
p1.join()
p2.join()
В этом примере два потока(t1иt2)запрашивают замки к одним и тем же ресурсам(AиB),но в разном порядке,отчего получается,что ни у того,ни у другого не хватает ресурсов для дальнейшей работы,и они оба безнадежно повисают,ожидая освобождения нужного ресурса.Благодаря операторам print можно увидеть последовательность событий:
Процесс 1 запрашивает ресурс A Процесс 1 получил ресурс A Процесс 2 запрашивает ресурс B Процесс 2 получил ресурс B Процесс 1 запрашивает ресурс B Процесс 2 запрашивает ресурс A
Существуют методики,позволяющие избежать подобных тупиков,однако их рассмотрение не входит в рамки данной лекции.Можно посоветовать следующие приемы:
· построить логику приложения так,чтобы никогда не запрашивать замки к двум ресурсам сразу.Возможно,придется определить составной ресурс.В частности,к данному примеру можно было бы определить замок"AB"для указания эксклюзивного доступа к ресурсамAиB.
· строго упорядочить все ресурсы(например,по цене)и всегда запрашивать их в определенном порядке(скажем,начиная с более дорогих ресурсов).При этом перед
заказом некоторого ресурса поток должен отказаться от заблокированных им более дешевых ресурсов.
|