Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ? Мультипоточный Питон 
:(
    Опции темы
grock
Дата 4.8.2005, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 3.8.2005
Где: Санкт - Петербург

Репутация: 1
Всего: 1



Надо сделать мультипоточное приложение, подскажите кто-нибудь, где можно что-нибудь почитать (посмотроть примеры) про это


PM MAIL   Вверх
grock
Дата 4.8.2005, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 3.8.2005
Где: Санкт - Петербург

Репутация: 1
Всего: 1



Все спасибо, разобрался

PM MAIL   Вверх
AntonSaburov
Дата 4.8.2005, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: нет
Всего: 118



А поделиться ? Я бы с удовольствием такую тему в рассылку бы вставил.
PM MAIL WWW ICQ   Вверх
grock
Дата 4.8.2005, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 3.8.2005
Где: Санкт - Петербург

Репутация: 1
Всего: 1



Лови тогда пару примеров ( ну а если интересуют подробности rtfm threading или google: thread python ) :
PS: Когда появиться подсветка для питоньего кода

Общее описание
Программа работающая как прокси пересылающая информацию на определенный порт.

Исходный код
"""
Для запуска использовать 'pinhole port host [newport]'

Программа форвардит весь трафик который приходит
на порт port к хосту host [опционально на его порт newport]

Примеры:

pinhole 8080 xen.ru 80
Допустим вы запустили программу на компьютере new_proxy, тогда
прописав в качестве proxy new_proxy:8080 вы получите
прокси сервер который всегда будет коннектиться только
на сайт xen.ru smile

pinhole 23 localhost 2323
Теперь если к вам извне будет телнетиться кто-нибудь, то
его трафик будет форвардится на порт 2323

"""
Код

import sys
from socket import *
from threading import Thread
import time

LOGGING = 1

def log( s ):
    if LOGGING:
        print '%s:%s' % ( time.ctime(), s )
        sys.stdout.flush()

class PipeThread( Thread ):
    pipes = []
    def __init__( self, source, sink ):
        Thread.__init__( self )
        self.source = source
        self.sink = sink

        log( 'Creating new pipe thread  %s ( %s -> %s )' % \
            ( self, source.getpeername(), sink.getpeername() ))
        PipeThread.pipes.append( self )
        log( '%s pipes active' % len( PipeThread.pipes ))

    def run( self ):
        while 1:
            try:
                data = self.source.recv( 1024 )
                if not data: break
                self.sink.send( data )
            except:
                break

        log( '%s terminating' % self )
        PipeThread.pipes.remove( self )
        log( '%s pipes active' % len( PipeThread.pipes ))

class Pinhole( Thread ):
    def __init__( self, port, newhost, newport ):
        Thread.__init__( self )
        log( 'Redirecting: localhost:%s -> %s:%s' % ( port, newhost, newport ))
        self.newhost = newhost
        self.newport = newport
        self.sock = socket( AF_INET, SOCK_STREAM )
        self.sock.bind(( '', port ))
        self.sock.listen(5)

    def run( self ):
        while 1:
            newsock, address = self.sock.accept()
            log( 'Creating new session for %s %s ' % address )
            fwd = socket( AF_INET, SOCK_STREAM )
            fwd.connect(( self.newhost, self.newport ))
            PipeThread( newsock, fwd ).start()
            PipeThread( fwd, newsock ).start()

if __name__ == '__main__':

    print 'Starting Pinhole'

    import sys
    sys.stdout = open( 'pinhole.log', 'w' )

    if len( sys.argv ) > 1:
        port = newport = int( sys.argv[1] )
        newhost = sys.argv[2]
        if len( sys.argv ) == 4: newport = int( sys.argv[3] )
        Pinhole( port, newhost, newport ).start()
    else:
        Pinhole( 80, 'hydrogen', 80 ).start()
        Pinhole( 23, 'hydrogen', 23 ).start()



Код

from Tkinter import *
import random
import threading
import time
import sys

WIDTH = 400
HEIGHT = 300
SIGMA = 10
BUZZ = 2
RADIUS = 2
LAMBDA = 10
FILL = 'red'

stop = 0                                # Set when main loop exits

def particle(canvas):
    r = RADIUS
    x = random.gauss(WIDTH/2.0, SIGMA)
    y = random.gauss(HEIGHT/2.0, SIGMA)
    p = canvas.create_oval(x-r, y-r, x+r, y+r, fill=FILL)
    while not stop:
        dx = random.gauss(0, BUZZ)
        dy = random.gauss(0, BUZZ)
        dt = random.expovariate(LAMBDA)
        try:
            canvas.move(p, dx, dy)
        except TclError:
            break
        time.sleep(dt)

def main():
    global stop
    root = Tk()
    canvas = Canvas(root, width=WIDTH, height=HEIGHT)
    canvas.pack(fill='both', expand=1)
    np = 30
    if sys.argv[1:]:
        np = int(sys.argv[1])
    for i in range(np):
        t = threading.Thread(target=particle, args=(canvas,))
        t.start()
    try:
        root.mainloop()
    finally:
        stop = 1

main()



PM MAIL   Вверх
grock
Дата 4.8.2005, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 3.8.2005
Где: Санкт - Петербург

Репутация: 1
Всего: 1



И в догонку мой пример, тут вообще все просто

Код

from time import *
from Tkinter import *
import threading


stop = 0

def timer(z):
    while not stop:
        #sleep(1)  
        x = w.i.get()
        w.i.set ( str( int(x) + z) )
        sleep(1)

def timer1(z):
    while not stop:
        #sleep(1)  
        x = w.x.get()
        w.x.set ( str( int(x) + z) )
        sleep(1)

w = Tk()

w.x = StringVar (); w.i = StringVar ()
w.i.set('0'); w.x.set('0')

zz = Label (w, textvariable = w.i)
xx = Label (w, textvariable = w.x)
zz.pack()
xx.pack()
t = threading.Thread(target=timer, args = (1,))
t1 = threading.Thread(target=timer1, args = (2,))
t.start(); t1.start()


w.mainloop()

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0461 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.