Асинхронный каунтер на python

261
31 октября 2017, 01:07

Здравствуйте. Есть вот такой простой код на javascript:

function Counter () {
  this.count = 0;
  setInterval(() => this.count++, 1000);
}
var counter = new Counter();

Каждый раз когда я вызываю counter, я получаю значение, которое раз в 1 секунду увеличивается на 1.

Как написать аналогичную функцию в python?

Если я пробую что-то вроде:

def counter():
    counter = 0
    while counter < 1000:
        counter += 1
        sleep(1)
    return counter
c = counter()

То терминал занят и я не могу получить значение.

А если же так:

def counter():
    counter = 0
    while counter < 1000:
        counter += 1
        sleep(1)
        return counter
c = counter()

то c всегда равен 1

Answer 1
import time
def counter():
    start = time.time()
    while True:
        yield int(time.time() - start)

c = counter()
print(next(c))
time.sleep(2)
print(next(c))
time.sleep(1)
print(next(c))
Answer 2

Используйте itertools.count():

import itertools
counter = itertools.count()

Затем всякий раз, когда будет нужно следующее число, используйте

next(counter)

(например next_id = next(counter)) так как counter просто итератор.

Примечание:

itertools.count() позволяет использовать ключевые параметре start и/или step, например itertools.count(start=100, step=10) выдает значения 100, 110, 120, ...

READ ALSO
React, Gulp. Не загружаются стили

React, Gulp. Не загружаются стили

Пишу приложение с использованием React, Node, GulpВозникла проблема с подключением стилей в компонент

282
Node.js socket.io не может подключиться к серверу

Node.js socket.io не может подключиться к серверу

Здравствуйте, делаю nodejs сервер для уведомлений и сообщений

332
Почему при прокрутке вправо/влево между страницами пустое пространство?

Почему при прокрутке вправо/влево между страницами пустое пространство?

Нужен способ сделать так, чтобы все страницы перемещались влево, вправо, вниз и вверхПеремещение вниз и вверх работает нормально, а вправо...

378
Изменилось ли значение input?

Изменилось ли значение input?

Есть <input placeholder="Вопрос" onblur="myFunc(this)" onkeydown="myFunc2(this, event)" type="text">

292