gentoo.ru
python
python@conference.gentoo.ru
Среда, 1 сентября 2010< ^ >
krigstask установил(а) тему: Python: простой и удобный язык программирования широкого применения
Конфигурация комнаты
Участники комнаты

GMT+4
[01:30:59] qnikst вышел(а) из комнаты
[13:12:51] maksbotan вошёл(а) в комнату
[13:18:40] reonaydo вошёл(а) в комнату
[13:18:46] <reonaydo> есть тут кто?
[13:19:28] <maksbotan> да
[13:25:42] lk4d4 вошёл(а) в комнату
[13:27:06] <maksbotan> lk4d4: ну
[13:27:16] <lk4d4> щас прогу залью на пасту
[13:27:41] <maksbotan> ок
[13:29:30] <lk4d4> maksbotan: http://paste.org.ru/?8qsomw
[13:30:20] <lk4d4> вот я короче обрабатываю исключение Empty и в этом проблема
[13:30:32] <lk4d4> причем, если задать очередь ограниченную, то все ок будет
[13:30:59] <reonaydo> maksbotan: как узнать все кодировки, о которых знает питон?
[13:31:30] <maksbotan> reonaydo: ща-ща, где то было
[13:31:59] <reonaydo> из которых он могёт в unicode преобразовать строку
[13:32:22] <maksbotan> lk4d4: а на кой чорт лок там?
[13:32:27] <lk4d4> да хз
[13:32:42] <maksbotan> очередь блокирует поток при get()
[13:32:52] <lk4d4> вот оно че
[13:34:40] <lk4d4> но дело не в локе похоже
[13:35:12] <maksbotan> exception Queue.Empty
Exception raised when non-blocking get() (or get_nowait()) is called on a Queue object which is empty.
[13:35:23] <maksbotan> а ты вызываешь блокирующий get()
[13:35:31] <maksbotan> так что никаких експшнов
[13:35:40] <maksbotan> делай так:
[13:35:59] <maksbotan> if not Names.Empty():
    Names.get()
[13:36:07] <maksbotan> ну или замок + get_nowait
[13:36:10] <lk4d4> Otherwise (block is false), return an item if one is immediately available, else raise the Empty exception
[13:36:36] <lk4d4> в гете написано
[13:36:50] <maksbotan> ну тык у тебя block то true
[13:37:12] <maksbotan> поэтому он тупо блокируется и ждет
[13:40:08] <maksbotan> reonaydo: ls /usr/lib/python2.6/encodings/
[13:40:19] <maksbotan> lk4d4: понял?
[13:40:36] <reonaydo> maksbotan: как-то не тру -_-
[13:42:10] <maksbotan> import encodings
print encodings.aliases.aliases
[13:42:17] <maksbotan> но это тоже не очень весело
[13:42:40] <reonaydo> ну это уже лучше
[14:18:42] <lk4d4> maksbotan: понял, а если очередь пуста, что будет?
[14:19:06] <maksbotan> в моем варианте get() не выполнится
[14:19:29] <lk4d4> а если выполнять гет при пустой очереди?
[14:19:34] <maksbotan> if not Names.Empty():
    Names.get()
else:
    continue
[14:19:44] <maksbotan> то заблокируется до поступления данных
[14:22:16] <lk4d4> чето беда какая-то c неограниченной очередью
[14:24:52] <maksbotan> lk4d4: совсем даже не беда
[14:25:14] <lk4d4> ну у меня не работает
[14:25:35] <maksbotan> покажи новый вариант кода
[14:26:25] <lk4d4> http://paste.org.ru/?ji4tx3
[14:26:59] <maksbotan> ну и когда запускаешь что происходит?
[14:27:53] <lk4d4> пустой вывод
[14:28:03] <lk4d4> или Exception in thread Thread-1 (most likely raised during interpreter shutdown):
[14:28:35] <maksbotan> а должно быть что?
[14:28:57] <lk4d4> print "Uploading: %s" % path
[14:29:00] <lk4d4> вот эти принты
[14:29:29] <maksbotan> тык, для начала попробуй в очередь кортежи пихать а не скрипты
[14:29:33] <maksbotan> списки*
[14:29:37] <maksbotan> это как-то правильнее
[14:29:39] <lk4d4> с ограниченной очередью нормалян все
[14:29:43] <maksbotan> но ни на что не влияет
[14:29:53] <lk4d4> ок, это попробую)
[14:31:38] <maksbotan>     HTTPThread.daemon = True
[14:31:41] <maksbotan> вот это зачем?
[14:32:02] <lk4d4> хз, в примере так было
[14:32:06] <maksbotan> мне кажется что главный цикл напихивает очередь всеми файлами и завершается
[14:32:18] <maksbotan> а т.к. треды -- демоны, то интерпретатор выключается
[14:32:24] <lk4d4> вот сволота
[14:32:28] <maksbotan> A thread can be flagged as a “daemon thread”. The significance of this flag is that the entire Python program exits when only daemon threads are left.
[14:32:59] <maksbotan> либо убери демона либо queue.join() после наполнения цикла
[14:33:09] <maksbotan> ну то есть Names.join()
[14:33:30] <lk4d4> ага, спасибо
[14:33:35] <maksbotan> не за что
[14:33:38] <maksbotan> обращайся =)
[14:36:30] <lk4d4> блин, и так и так процесс никогда не завершается :(
[14:37:19] <maksbotan> не может быть
[14:37:49] <maksbotan> а, ну верно
[14:38:26] <maksbotan> стоп, нет
[14:38:29] <maksbotan> тут не должно
[14:38:42] <maksbotan> то есть оно заканчивает работу, но процесс не завершается?
[14:38:47] <lk4d4> и мен так казалось, что с демонами не должно
[14:38:48] <lk4d4> ага
[14:39:29] <maksbotan> хм
[14:41:13] <maksbotan> while True:
        if not Names.empty():
            path,name = Names.get()
        else:
            continue
[14:41:18] <maksbotan> эмм
[14:41:49] <lk4d4> task_done в worker добавил
[14:41:56] <lk4d4> выключается теперь
[14:42:00] <maksbotan> ну и хорошо
[14:42:02] <lk4d4> похоже в тредах всегда надо вызывать
[14:42:13] <maksbotan> добавь ещё в самом конце Names.join()
[14:42:17] <maksbotan> чтоб совсем красиво было
[14:42:20] <lk4d4> да, это добавил
[14:42:54] <maksbotan> а треды оставил демонами?
[14:42:58] <lk4d4> угу
[14:43:05] <maksbotan> ну и славненько
[14:55:53] <lk4d4> maksbotan: а если в треде возникнет эксепшон, то что будет?
[14:56:02] <maksbotan> а незнаю =)
[14:56:23] <lk4d4> а вот у меня возникает и похоже тред повисает, не завершается процесс
[14:57:23] <lk4d4> поставил except, нормально пошло
[15:04:47] reonaydo вышел(а) из комнаты
[17:34:05] <lk4d4> maksbotan: ботан, выручай
[17:34:10] <maksbotan> lk4d4: ну
[17:34:14] <lk4d4> как глобальную переменную объявить?
[17:34:27] <maksbotan> global перед использованием
[17:35:03] <maksbotan> lk4d4: но вообще глобальные переменные это слегка не Ъ
[17:35:32] <maksbotan> что тебе сделать-то надо?
[17:35:42] <lk4d4> хм, да и вообще
[17:36:10] <lk4d4> я в тредах хотел счетчик замутить, это же на него лок надо мутить
[17:36:31] <maksbotan> у меня через глобальные сделано
[17:36:40] <maksbotan> просто я лучше ничего пока не придумал
[17:36:48] <lk4d4> угу
[17:37:31] <maksbotan> да, тут нельзя сделать переменную и каждому потоку указатель дать
[17:37:33] <lk4d4> просто у меня-то очередь, можно по ней считать, но бывают эксепшоны и тогда все равно в треде надо уменьшать
[17:43:26] <lk4d4> можно попробовать пронаследовать Thread и что-то там намутить
[17:43:42] <maksbotan> можно
[17:43:51] <maksbotan> код worker пойдет в runn()
[17:43:53] <maksbotan> run()
[17:44:00] <maksbotan> и создавать можно будет без target=
[17:46:16] <lk4d4> нет, я имею ввиду счетчик там завести
[17:46:27] <maksbotan> я понял
[17:46:31] <lk4d4> и тогда без глобальных
[17:47:03] <maksbotan> а зачем тебе вообще счетчик?
[17:47:42] <lk4d4> у меня тут снифер и я типа шлю посты с файлами
[17:47:53] <lk4d4> а потом сравниваю сколько отослал и сколько перехватил
[17:48:00] <lk4d4> если не хватает ищу что да как
[17:48:03] <maksbotan> =)
[17:55:47] <lk4d4> maksbotan: а не знаешь как static сделать?
[17:55:56] <maksbotan> какой статик?
[17:55:58] <lk4d4> что бы для всех представителей переменная одна была
[17:56:25] <lk4d4> тредов-то много, а счетчик один
[17:56:28] <maksbotan> объяви её в классе
[17:56:30] <maksbotan> вроде бы
[17:56:40] <lk4d4> а наоборот тогда как?
[17:56:59] <maksbotan> ну присвой её в конструкторе
[17:57:12] <lk4d4> вроде просек
[17:57:19] <lk4d4> класс сам по себе объект
[17:57:34] <maksbotan> ага
[17:59:55] <lk4d4> но все равно как-то некрасиво
[18:00:03] <maksbotan> ага
[18:17:18] <lk4d4> maksbotan: а не помнишь статейку, там типа рецепты какие-то для питон
[18:17:31] <maksbotan> не понимаю о чем ты
[18:18:14] <lk4d4> была какая-то статья, 7 рецептов для программистов питон или как-то так
[18:18:23] <maksbotan> не помню
[18:18:45] <lk4d4> я уже нашел)
[18:19:01] <maksbotan> поделишься?
[18:19:20] <lk4d4> http://www.internet-technologies.ru/articles/article_780.html
[18:21:13] <maksbotan> что-то я ничего не понял там =)
[18:21:36] <lk4d4> да я в первый раз тоже не понял, думал сейчас пойму
[18:21:39] <lk4d4> ан нет
[19:04:35] <lk4d4> maksbotan: а multiprocessing не юзал?
[19:05:31] <maksbotan> нет
[19:05:32] <maksbotan> но читал
[19:05:36] <maksbotan> прикольная штука
[19:05:40] <maksbotan> обходит GIL
[20:25:30] qnikst вошёл(а) в комнату
[20:26:53] maksbotan вышел(а) из комнаты
[22:55:06] maksbotan вошёл(а) в комнату
[23:33:47] maksbotan вышел(а) из комнаты
[23:38:23] maksbotan вошёл(а) в комнату
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!