Найти - Пользователи
Полная версия: gevent vs threading
Начало » Python для новичков » gevent vs threading
1
realivan
Добрый день.
Можно ли заменить такой код:
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()
кодом с помощью gevent модуля? У меня выполнение не параллельно получается.
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)
4kpt_IV
Гевент зло. Вообще забудьте про него…
realivan
Гевент зло. Вообще забудьте про него…
Почему? Мне про потоки тоже самое говорят.
realivan
Разобрался. Надо из 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)
Спасибо за участие.
4kpt_IV
Есть 2 варианта
1. ThreadPool
2. ProcessPoll
Про то какой из них и как использовать хорошо написал М. Самерфилд в последней книге. Рекомендую. Ну и все же от гевента отказывайтесь. Гринлеты не есть гуд. Тем паче уже асинкио не юзал только ленивый
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB