道琼斯指数当前股票价格截图电报机器人
问题描述:
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()