道琼斯指数当前股票价格截图电报机器人

问题描述:

iam创建一个电报机器人这将给我目前的道琼斯股票价格。该过程正在以这种方式工作,它需要从谷歌的屏幕截图保存它然后削减它并将其作为消息发送。但是如果一个人或两个以上的人同时运行这个命令呢?我不想碰撞。我需要一些线程或什么?我可以更快地完成这个过程吗?道琼斯指数当前股票价格截图电报机器人

@bot.message_handler(func = lambda message: 'Dow Jones'in message.text) 

def repeat_all_messages222(message): 
    url='https://www.google.com/search?q=dow+jones+current+price&oq=dow+jones+current+price&aqs=chrome..69i57&sourceid=chrome&ie=UTF-8' 
    adr='/home/weblanss/mysite/dowJones/ss.png' 

    bot.send_message(message.chat.id,'please wait your request is being processed') 

    size=(120 ,190,760, 640) 
    ecran(url,size,adr) 
    w2=open(adr,'rb') 
    bot.send_photo(message.chat.id,w2) 


def ecran (url,size,adr): 
    display = Display(visible=0, size=(800, 600)) 
    display.start() 

    browser = webdriver.Firefox() 

    browser.implicitly_wait(15) 


    browser.get(url) 
    browser.implicitly_wait(15) 
    browser.save_screenshot(adr) 

    browser.quit() 
    img = Image.open(adr) 
    crop_rectangle = size 
    cropped_img = img.crop(crop_rectangle) 

    cropped_img.save(adr) 
    display.stop() 

我正在使用pythonanywhere服务器。蟒蛇3.5 或者也许有一些其他简单的方法来获得当前的价格。对我来说图片是一种更好的方式,但其可能会得到价格作为整数。例如,雅虎财务并未显示道琼斯指数的当前价格

如果您想避免冲突,我认为最好的方法是缓存价格指数为短时间。显然,价格指数并不是每秒都在变化。

要实现缓存,您可以设置超时(比方说1分钟)和一个标志。像这样初始化它们:

timeout = time.time()flag = False。请注意,time.time()会返回当前时间。

每当价格指数用户的请求,首先检查是否超过1分钟已过超时:

if time.time() - timeout > 1 * 60: 
    # you need to update the screenshot 
else: 
    # you can send the user the previously taken screenshot 

这里的标志,以防止碰撞。如果flag is True表示系统正在截图,直到完成后才能再次请求。因此,我们完成了这样的代码:

if time.time() - timeout > 1 * 60: 
    if flag is False: 
     flag = True 
     take_screenshot() 
     flag = False 
    while flag is True: 
     time.sleep(1) 
    send_screenshot() 
else: 
    send_screenshot()