import asyncio
import datetime
import random
from functools import wraps, partial
import plotly.express as px
def async_wrap(func):
@wraps(func)
async def run(*args, loop=None, executor=None, **kwargs):
if loop is None:
loop = asyncio.get_event_loop()
pfunc = partial(func, *args, **kwargs)
return await loop.run_in_executor(executor, pfunc)
return run
@async_wrap
def get_plot_bytes() -> bytes:
now = datetime.datetime.now()
data = {now.replace(day=now.day + i): random.randint(1, 10) for i in range(10)}
fig = px.area(x=list(data.keys()), y=list(data.values()), title='Статистика покупок')
fig.update_layout(xaxis_title="Дата", yaxis_title="Количество покупок")
return fig.to_image('png')
async def main():
await get_plot_bytes()
if __name__ == '__main__':
asyncio.new_event_loop().run_until_complete(main())