我正在创建一个电报机器人,它将向我发送道琼斯的当前股票价格。这个过程是这样运作的:它从谷歌屏幕截图,保存它,然后削减它,并发送它作为消息。但是如果两个或更多的人同时运行这个命令怎么办?我不希望碰撞。我需要一些线还是什么?我能更快地完成这个过程吗?
@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()
我使用的是Python Anywhere服务器。Python 3.5
或者也许有其他简单的方法来获得当前的价格?对我来说,一张图片是一个更好的方法,但如果有可能得到一个整数的价格。例如雅虎财经并不显示道琼斯指数的现价
1条答案
按热度按时间s3fp2yjn1#
如果你想避免冲突,在我看来,最好的方法是缓存价格指数短时间。显然,价格指数并不是每秒钟都在变化。
为了实现缓存,您可以设置一个超时(假设1分钟)和一个标志。按如下方式初始化:
timeout = time.time()
和flag = False
。请注意,time.time()
返回当前时间。每当用户请求价格指数时,首先检查超时时间是否超过1分钟:
这里的标志是为了防止碰撞。如果是
flag is True
,则表示系统正在截图,在完成之前不能再次请求。因此,我们完成代码如下: