Python - генерировать значения по требованию - PullRequest
0 голосов
/ 06 июля 2019

У меня возникают трудности с поиском решения этой проблемы, я хочу создать значение через определенное время, так что, например, увеличьте значение 100,00 на 0,01 через 10 секунд, но это уже было для меня, в цикле for или в цикле while я не могу получить значение до тех пор, пока итерация не остановится, например, если у меня есть переменная с номером 100,00, и я хочу увеличить или уменьшить это значение на 0,01

я могу сделать это:

import time
import datetime 
tracking = time.time()

def values():
    cost = 100.00
    increase = .01

    for x in range(1,1000):
        print(x)
        time.sleep(2)

        if time.time() - 10 > tracking:
            cost += increase
            print('Cost: {}'.format(cost))

            tracking = time.time()

    latestvalue = cost   

values()

хорошо, так что цикл выполняет свою работу, он увеличивает значение на 0,01 каждые 10 секунд, но это бесполезно, так как у меня нет к нему доступа, последнее значение только даст мне его значение по умолчанию, равное 100,0

еще одно решение, которое я подумал - просто сгенерировать значения и поместить их в список

import time
import datetime

increment = [100.01, 100.02000000000001, 100.03000000000002, 100.04000000000002, 100.05000000000003]

def values():

    for i in increment:
        newvalue = i
        time.sleep(10)
        print(newvalue)       


c = 0
while True:
    c+=1
    print(c)
    values()
    time.sleep(2)

но этот способ не кажется мне практичным или надежным, кто-нибудь может мне помочь с решением? увеличить или уменьшить значение по запросу через некоторое время (10 секунд)

Ответы [ 2 ]

0 голосов
/ 06 июля 2019

Вы можете использовать Timer() объект из threading модуля.В этом случае вы можете вызывать функцию снова и снова, без необходимости в цикле while.Для остановки используется метод Timer(), cancel.

from threading import Timer

def while_loop():
    t = Timer(1, while_loop)
    t.start()
    global variable
    variable-=0.1
    do_something()

def do_something():
    print(variable)

variable = 100
while_loop()
0 голосов
/ 06 июля 2019

Я не уверен, правильно ли я понял проблему. Этот скрипт запускает один поток, который на каждом выбранном временном шаге (в данном случае 0,1 с) генерирует значение, и помещает его в out_val. В основной теме я читаю эту переменную каждые 2 секунды:

from itertools import count
from time import sleep
import threading

def thread_function(start, inc, out_val, t=0.1):
    for val in count(start, inc):
        out_val[0] = val
        sleep(t)


out = [None]
x = threading.Thread(target=thread_function, args=(100.0, 0.1, out))
x.start()

while True:
    print(out[0])
    sleep(2)

Печать:

100.0
101.89999999999989
103.89999999999978
105.89999999999966

...and so on.
...