Я играю с gevent, и я пытаюсь понять, почему мой код блокирует и как я могу это исправить.
У меня есть пул зеленых, и каждый из них разговаривает с бережливым клиентом, который собирает данные с удаленного бережливого сервера. Для целей упражнения бережливый сервер всегда принимает > 1s для возврата любых данных.
Когда я создаю зелья и запускаю соединение, они не выполняют все параллельно, а вместо этого один за другим. Я понимаю, что это происходит из-за того, что мой код "блокируется", поскольку, когда я запускаю monkey.patch_all()
, все зеленые панели волшебным образом запускаются параллельно.
Итак, как мне заставить код не блокировать себя, а не обезвреживать все и не понимать, что он делает?
Вот пример того, что я не понимаю:
import time
from gevent.pool import Pool
def hello():
print 'Hello %d' % time.time()
time.sleep(1)
def main():
pool = Pool(5)
for _ in xrange(5):
pool.spawn(hello)
pool.join()
if __name__ == '__main__':
main()
Выход
Hello 1345477112
Hello 1345477113
Hello 1345477114
Hello 1345477115
Hello 1345477116
Я знаю, что могу использовать gevent.sleep, но как сделать эту функцию не блокирующей с регулярным time.sleep?
Спасибо