Search
Write a publication
Pull to refresh
-1
0
cybergrind @cybergrind

User

Send message
вот специально проверил: ничего не творится на простаивающем приложении, так что ваше приложение походу не простаивало.
Только цифры из головы (ну или с теми которые знаю я сильно не совпадают), соответственно график едет.
Своими глазами наблюдал разницу типа 50 легальных копий vs 50к нелегальных из китая

Но в целом идея верная =)
не угадал с веткой
очень не советую использовать. насколько мне не изменяет память, эту возможность собираются выпилить в R16
ну твистед позволит наиболее полно загрузить одно ядро, так что если нету реально необходимости параллелить (например когда большую часть времени мы ждем ответы), то лучше не параллелить.
ну а если надо — делается аналогичная реализация на базе хотя бы memcached или flock. даже сам класс придется не сильно много переписывать
ну и d = some_service.do_long_boring_call(a) — этот вызов же скорее всего должен вернуть Deferred, иначе смысл использовать лок? в таком случае в multiply попадет не результат, а всего лишь Deferred.

п.с. ничего личного, но с твистедом и так местами непонятно, что произошло, так что примеры без адекватной обработки ошибок и содержащие ошибки могут еще больше запутать понимание
d.addCallback(power,a) читать как d.addCallback(multiply, a)?
ну и еще бы хорошо добавить d.addCallbacks(release_pool, release_pool), а то релиз походу не вызывается во втором примере

def f(n):
print '-'.join(map(str, xrange(1, n+1))[::-1 if (n+1)%2 else 1])

я так понимаю это коммент мне =)
асинхронное программирование, лично для меня, дает некоторые плюсы — отсутствие синхронизации. это очень здорово упрощает программирование, т.к. я здорово гробил силы на многопоточно-специфические вещи.
для чего стоит делать много потоков — именно загрузить много ядер, ведь если одно ядро справляется, а все остальное ввод-вывод, то смысл блокироваться на этих событиях? я понимаю, что проще использовать много потоков, что бы сделать то, что можно сделать асинхронно, но это только если ты привык писать многопоточные вещи.
есть мнение что его можно выучить =)
стандартные операции с питоновскими сокетами — станут асинхронными, написаные без их участия — нет.

я думаю вам стоит посмотреть на twisted. это, наверное, одна из лучших вещей, которую я видел в питоне. во-первых — это стандартный cpython, т.е. можно быть уверенным в том, что не придется пилить чужие исходники. во-вторых — там есть фактически все тоже самое, заменяем каналы на DeferredQueue и получаем сходный эффект. Надо, конечно stateless функции писать, но это как и везде.

ну и обычные методы для IPC — amqp. или можно глянуть zeromq, если хочется совсем скорости
там urlopen заменен на асинхронную версию, т.е. когда вы делаете urlopen — управление передается интерпретатору.
в stackless для этого все написано несколько версий socket библиотек (e.g. stacklesssocket)

например что-то вроде:

import stacklesssocket
stacklesssocket.install()

будет манкипатчить стандартный сокет.
ну например тем, что изза GIL писать многопоточные программы в python вообще не стоит, исключительно асинхронные вещи и IPC.
в принципе есть еще winpdb, гуй на wx, есть возможность удаленной отладки. в принципе лучший отладчик для питона, имхо
действительно стоит прочтения

Information

Rating
Does not participate
Location
Минск, Минская обл., Беларусь
Date of birth
Registered
Activity