Мы поможем в написании ваших работ!
ЗНАЕТЕ ЛИ ВЫ?
|
Thread(group, target, name, args, kwargs)
Содержание книги
- def do_something(x): lst = map(None, x); lst.reverse();
- print socket.getservbyname(srv, 'tcp'), srv
- Здравствуйте. Я изучаю курс по языку Python и отправляю письмо его автору.
- 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))
Thread(group, target, name, args, kwargs)
Здесь group-группа потоков(пока что не используется,должен быть равен None),target- объект, который будет вызван в методе run(), name - имя потока, args и kwargs -
последовательность и словарь позиционных и именованных параметров(соответственно)для вызова заданного в параметре target объекта.В примере выше были использованы
только позиционные параметры,но то же самое можно было выполнить и с применением именованных параметров:
import threading
def proc(n):
print "Процесс", n
p1 = threading.Thread(target=proc, name="t1", kwargs={"n": "1"})
p2 = threading.Thread(target=proc, name="t2", kwargs={"n": "2"}) p1.start()
p2.start()
То же самое можно проделать через наследование от класса threading.Thread с определением собственного конструктора и метода run():
import threading
class T(threading.Thread): def __init__(self, n):
threading.Thread.__init__(self, name="t" + n) self.n = n
def run(self):
print "Процесс", self.n
p1 = T("1")
p2 = T("2") p1.start() p2.start()
Самое первое,что необходимо сделать в конструкторе-вызвать конструктор базового класса.Как и раньше,для запуска потока нужно выполнить метод start() объекта-потока,что приведет к выполнению действий в методе run().
Жизнью потоков можно управлять вызовом методов:
· start()Дает потоку жизнь.
· run()Этот метод представляет действия,которые должны быть выполнены в потоке.
· join([timeout])Поток,который вызывает этот метод,приостанавливается,ожидая завершения потока,чей метод вызван.Параметр timeout(число с плавающей точкой)позволяет указать время ожидания(в секундах),по истечении которого
приостановленный поток продолжает свою работу независимо от завершения потока,чей метод join был вызван.Вызывать join() некоторого потока можно много раз.Поток не может вызвать метод join() самого себя.Также нельзя ожидать завершения еще не запущенного потока.Слово"join"в переводе с английского означает"присоединить",то есть,метод,вызвавший join(),желает,чтобы поток по завершении присоединился к вызывающему метод потоку.
· getName()Возвращает имя потока.Для главного потока это "MainThread".
· setName(name)Присваивает потоку имя name.
· isAlive()Возвращает истину,если поток работает(метод run() уже вызван,но еще не завершился).
· isDaemon()Возвращает истину,если поток имеет признак демона.Программа наPython завершается по завершении всех потоков, не являющихся демонами. Главный поток демоном не является.
· setDaemon(daemonic)Устанавливает признак daemonic того,что поток является демоном.Начальное значение этого признака заимствуется у потока,запустившего данный.Признак можно изменять только для потоков,которые еще не запущены.
В модуле Thread пока что не реализованы возможности,присущие потокам вJava
(определение групп потоков, приостановка и прерывание потоков извне, приоритеты и некоторые другие вещи),однако они,скорее всего,будут созданы в недалеком будущем.
|