[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум Panda3D - по русски » Общий форум » Python » Параллельные процессы
Параллельные процессы
k0tДата: Пятница, 13.08.2010, 12:56 | Сообщение # 1
Подполковник
Группа: Пользователи
Сообщений: 104
Награды: 0
Репутация: 4
Статус: Offline
Есть такая штука в питоне... Короче, есть проблемка.
Есть код, где нужен интерфейс ГТК-шный, плюс постоянно должны идти теневые процессы.

Но что-то в гтк-шной библиотеке не так. Даже простой код

Code
import threading
import time

def proc():
  while 1:
   print 'Yo'
   a = raw_input()
   print 'input: ' , a

def proc2():
     while 1:
         time.sleep(1)
         print time.time()

p1 = threading.Thread(target=proc)
p2 = threading.Thread(target=proc2)
p1.start()
p2.start()

p1.join()
p2.join()

перестает выполняться правильно (читай - параллельно), превращается в последовательный (процесс 2 не продолжается, пока не закончится процесс1, и цикл), если импортировать ГТК+ библиотеку...
Йа понимаю, что иду каким-то неверным путем, но что делать - не понимаю...

Добавлено (13.08.2010, 12:56)
---------------------------------------------
Решил забить на ГТК и взял поумолчательскую Тк-библиотеку.
Кстати, в 2.7 питоне тоже хрень такая с нитями =_= только по умолчанию, даже без гтк-библиотеки. Не пойму, в чем дело...

 
ninthДата: Пятница, 13.08.2010, 21:01 | Сообщение # 2
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
Да, гтк по-хитрому работает с потоками
Code

import pygtk
pygtk.require('2.0')
import gtk, time

from threading import Thread
from time import sleep

class HelloWorld:

      def hello1(self, widget, data=None):
          self.drugoypotok=Thread(target=self.hello2, name="t1")
          self.drugoypotok.start()

      def hello2(self):
          print "Hello World"
          sleep(0.1)
          print "Hello Hello World"

      def delete_event(self, widget, event, data=None):
          print "delete event occurred"
          return False

      def destroy(self, widget, data=None):
          print "destroy signal occurred"
          gtk.main_quit()

      def timestep(self):
          while 1:
              time.sleep(1)
              print time.time()

      def __init__(self):
          self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
          self.window.connect("delete_event", self.delete_event)
          self.window.connect("destroy", self.destroy)
          self.window.set_border_width(10)
          self.button = gtk.Button("Hello World")
          self.button.connect("clicked", self.hello1, None)
          self.window.add(self.button)
          self.button.show()
          self.window.show()

      def main(self):
          self.tt=Thread(target=self.timestep, name="tts")
          self.tt.start()
          gtk.main()

if __name__ == "__main__":
      gtk.gdk.threads_init()
      hello = HelloWorld()
      gtk.gdk.threads_enter()
      hello.main()
      gtk.gdk.threads_leave()

Пример взят отсюда и немного доделан http://python.su/forum/viewtopic.php?id=2101

по 2.7 ничего сказать не могу т.к. не использовал

 
BVOGДата: Понедельник, 13.09.2010, 20:18 | Сообщение # 3
Полковник
Группа: Проверенные
Сообщений: 184
Награды: 0
Репутация: 4
Статус: Offline
В принципе проблема эта есть везде, и даже с тасками в панде. Так как это в принципе не параллельные процессы, а псевдо - последовательновытесняющие, или как-то так. Процесор по-переменно перскакивает на каждую задачу, и тут та же проблема.

Skype: thebvog
 
Форум Panda3D - по русски » Общий форум » Python » Параллельные процессы
  • Страница 1 из 1
  • 1
Поиск: