Форум сайта python.su
0
Добрый день.
Можно ли заменить такой код:
import time import threading def echo(k): time.sleep(k) for i in range(k): print('поток', k, 'шаг', i) key = [5, 1, 3] for k in key: threading.Thread(target=echo, args=(k,)).start()
import gevent import time def echo(k): time.sleep(k) for i in range(k): print('поток', k, 'шаг', i) key = [5, 1, 3] jobs = [gevent.spawn(echo, k) for k in key] gevent.joinall(jobs)
Офлайн
49
Гевент зло. Вообще забудьте про него…
Офлайн
0
Гевент зло. Вообще забудьте про него…Почему? Мне про потоки тоже самое говорят.
Офлайн
0
Разобрался. Надо из gevent.threadpool использовать ThreadPool.
import gevent import time from gevent.threadpool import ThreadPool def echo(k): time.sleep(k) for i in range(k): print('поток', k, 'шаг', i) key = [5, 1, 3] pool = ThreadPool(5) jobs = [pool.spawn(echo, k) for k in key] gevent.joinall(jobs)
Отредактировано realivan (Июль 2, 2016 13:37:22)
Офлайн
49
Есть 2 варианта
1. ThreadPool
2. ProcessPoll
Про то какой из них и как использовать хорошо написал М. Самерфилд в последней книге. Рекомендую. Ну и все же от гевента отказывайтесь. Гринлеты не есть гуд. Тем паче уже асинкио не юзал только ленивый 
Офлайн