Уведомления

Группа в Telegram: @pythonsu

#1 Июль 2, 2016 12:46:55

realivan
Зарегистрирован: 2015-08-15
Сообщения: 39
Репутация: +  0  -
Профиль   Отправить e-mail  

gevent vs threading

Добрый день.
Можно ли заменить такой код:

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)

Офлайн

#2 Июль 2, 2016 13:07:54

4kpt_IV
Зарегистрирован: 2016-01-08
Сообщения: 999
Репутация: +  49  -
Профиль   Отправить e-mail  

gevent vs threading

Гевент зло. Вообще забудьте про него…

Офлайн

#3 Июль 2, 2016 13:15:29

realivan
Зарегистрирован: 2015-08-15
Сообщения: 39
Репутация: +  0  -
Профиль   Отправить e-mail  

gevent vs threading

Гевент зло. Вообще забудьте про него…
Почему? Мне про потоки тоже самое говорят.

Офлайн

#4 Июль 2, 2016 13:34:32

realivan
Зарегистрирован: 2015-08-15
Сообщения: 39
Репутация: +  0  -
Профиль   Отправить e-mail  

gevent vs threading

Разобрался. Надо из 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)

Офлайн

#5 Июль 2, 2016 13:58:25

4kpt_IV
Зарегистрирован: 2016-01-08
Сообщения: 999
Репутация: +  49  -
Профиль   Отправить e-mail  

gevent vs threading

Есть 2 варианта
1. ThreadPool
2. ProcessPoll
Про то какой из них и как использовать хорошо написал М. Самерфилд в последней книге. Рекомендую. Ну и все же от гевента отказывайтесь. Гринлеты не есть гуд. Тем паче уже асинкио не юзал только ленивый

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version