-
代码应该是没有问题的,因为相同的代码一字未动,早上可以正常使用,下午的时候就开始出现点击运行之后代码运行到一半,无法再继续进行下去,也无法自动终止进程,必须手动终止进程才可以。我想知道怎么解决这种问题
-
# -*- coding: utf-8 -*-# 此demo仅供测试使用,强烈建议使用sdk。需提前安装websocket-client, 执行pip install websocket-clientimport websocketimport threadingimport timeimport jsondef rasr_demo(): url = 'wss://{{endpoint}}/v1/{{project_id}}/rasr/short-stream' # endpoint和project_id需替换 audio_path = '音频路径' token = '用户对应region的token' header = { 'X-Auth-Token': token } with open(audio_path, 'rb') as f: data = f.read() body = { 'command': 'START', 'config': { 'audio_format': 'pcm8k16bit', 'property': 'chinese_8k_common' } } def _on_message(ws, message): print(message) def _on_error(ws, error): print(error) ws = websocket.WebSocketApp(url, header, on_message=_on_message, on_error=_on_error) _thread = threading.Thread(target=ws.run_forever, args=(None, None, 30, 20)) _thread.start() time.sleep(1) ws.send(json.dumps(body), opcode=websocket.ABNF.OPCODE_TEXT) now_index = 0 byte_len = 4000 while now_index < len(data): next_index = now_index + byte_len if next_index > len(data): next_index = len(data) send_array = data[now_index: next_index] ws.send(send_array, opcode=websocket.ABNF.OPCODE_BINARY) now_index += byte_len time.sleep(0.05) ws.send("{\"command\": \"END\", \"cancel\": \"false\"}", opcode=websocket.ABNF.OPCODE_TEXT) time.sleep(10) ws.close()if __name__ == '__main__': rasr_demo()
-
请问一直出现这个是为什么吗呢,ubuntu20.04
-
报错信息:FileNotFoundError(2, 'No such file or directory')
-
本文将从入门到精通地介绍APScheduler库的使用方法,带你掌握在Python中实现定时任务的技巧。APScheduler是Python中一个强大的第三方库,用于在后台执行定时任务。它允许我们根据设定的时间间隔、日期规则或特定时间来执行任务,适用于定时执行脚本、定时发送邮件、定时处理数据等场景。APScheduler的功能使得在Python中实现定时任务变得非常简单和高效。本文将从入门到精通地介绍APScheduler库的使用方法,带你掌握在Python中实现定时任务的技巧。1. 安装和导入首先,我们需要安装APScheduler库。可以使用pip命令进行安装:pip install apscheduler安装完成后,我们可以在Python代码中导入APScheduler:from apscheduler.schedulers.background import BackgroundScheduler2. 创建定时任务APScheduler提供了BackgroundScheduler和BlockingScheduler两种类型的调度器,用于创建定时任务。BackgroundScheduler在后台运行,不会阻塞主线程;而BlockingScheduler会阻塞主线程直到所有任务完成。from apscheduler.schedulers.background import BackgroundSchedulerimport time# 创建后台调度器scheduler = BackgroundScheduler()# 定义任务函数def job(): print("定时任务执行:", time.strftime("%Y-%m-%d %H:%M:%S")) # 添加定时任务,每隔5秒执行一次scheduler.add_job(job, 'interval', seconds=5)# 启动调度器scheduler.start()# 主线程等待一段时间后结束time.sleep(20)# 关闭调度器scheduler.shutdown()print("主线程结束")在上述代码中,我们首先创建了一个后台调度器scheduler,然后定义了一个名为job的任务函数,在其中打印当前时间。使用scheduler.add_job()添加了一个定时任务,设置为每隔5秒执行一次。然后,我们启动了调度器scheduler,让定时任务在后台执行。主线程等待20秒后结束,并调用scheduler.shutdown()关闭调度器。3. 定时任务触发器APScheduler提供了多种触发器类型,用于设置定时任务的触发条件。 interval触发器: 按照设定的时间间隔来触发任务。from apscheduler.schedulers.background import BackgroundSchedulerimport time# 创建后台调度器scheduler = BackgroundScheduler()# 定义任务函数def job(): print("定时任务执行:", time.strftime("%Y-%m-%d %H:%M:%S")) # 添加定时任务,每隔5秒执行一次scheduler.add_job(job, 'interval', seconds=5)# 启动调度器scheduler.start()# 主线程等待一段时间后结束time.sleep(20)# 关闭调度器scheduler.shutdown()print("主线程结束")在上述代码中,我们使用'interval'触发器,设置任务每隔5秒执行一次。 cron触发器: 使用类似于Linux中cron表达式的规则来触发任务,可以精确到秒。from apscheduler.schedulers.background import BackgroundSchedulerimport time# 创建后台调度器scheduler = BackgroundScheduler()# 定义任务函数def job(): print("定时任务执行:", time.strftime("%Y-%m-%d %H:%M:%S")) # 添加定时任务,每天的13点30分触发任务scheduler.add_job(job, 'cron', hour=13, minute=30)# 启动调度器scheduler.start()# 主线程等待一段时间后结束time.sleep(60)# 关闭调度器scheduler.shutdown()print("主线程结束")在上述代码中,我们使用'cron'触发器,设置任务每天的13点30分触发。 date触发器: 在指定的时间点触发任务。from apscheduler.schedulers.background import BackgroundSchedulerimport time# 创建后台调度器scheduler = BackgroundScheduler()# 定义任务函数def job(): print("定时任务执行:", time.strftime("%Y-%m-%d %H:%M:%S")) # 添加定时任务,设置任务在2023年7月31日10点30分触发scheduler.add_job(job, 'date', run_date='2023-07-31 10:30:00')# 启动调度器scheduler.start()# 主线程等待一段时间后结束time.sleep(60)# 关闭调度器scheduler.shutdown()print("主线程结束")在上述代码中,我们使用'date'触发器,设置任务在2023年7月31日10点30分触发。4. 任务存储APScheduler支持将任务存储在不同的后端存储中,如内存、数据库等。默认情况下,任务是存储在内存中的。from apscheduler.schedulers.background import BackgroundSchedulerimport time# 创建后台调度器scheduler = BackgroundScheduler()# 定义任务函数def job(): print("定时任务执行:", time.strftime("%Y-%m-%d %H:%M:%S")) # 添加定时任务,每隔5秒执行一次scheduler.add_job(job, 'interval', seconds=5)# 启动调度器scheduler.start()# 主线程等待一段时间后结束time.sleep(20)# 关闭调度器scheduler.shutdown()print("主线程结束")在上述代码中,我们使用默认的内存存储来存储任务。 如果需要将任务存储在数据库中,可以使用jobstores参数来设置。from apscheduler.schedulers.background import BackgroundSchedulerfrom apscheduler.jobstores.sqlalchemy import SQLAlchemyJobStoreimport time# 创建后台调度器scheduler = BackgroundScheduler()# 创建数据库存储jobstores = { 'default': SQLAlchemyJobStore(url='sqlite:///jobs.sqlite')}# 定义任务函数def job(): print("定时任务执行:", time.strftime("%Y-%m-%d %H:%M:%S")) # 添加定时任务,每隔5秒执行一次scheduler.add_job(job, 'interval', seconds=5)# 启动调度器scheduler.start()# 主线程等待一段时间后结束time.sleep(20)# 关闭调度器scheduler.shutdown()print("主线程结束")在上述代码中,我们使用了SQLAlchemyJobStore来将任务存储在SQLite数据库中。5. 并发执行默认情况下,APScheduler会将任务串行执行,也就是说一个任务结束后才会执行下一个任务。如果希望并发执行多个任务,可以使用max_instances参数来设置。from apscheduler.schedulers.background import BackgroundSchedulerimport time# 创建后台调度器scheduler = BackgroundScheduler()# 定义任务函数def job(index): print(f"定时任务{index}执行:", time.strftime("%Y-%m-%d %H:%M:%S")) # 添加定时任务,每隔5秒执行一次,最多并发3个任务scheduler.add_job(job, 'interval', seconds=5, args=[1], max_instances=3)scheduler.add_job(job, 'interval', seconds=5, args=[2], max_instances=3)scheduler.add_job(job, 'interval', seconds=5, args=[3], max_instances=3)# 启动调度器scheduler.start()# 主线程等待一段时间后结束time.sleep(20)# 关闭调度器scheduler.shutdown()print("主线程结束")在上述代码中,我们使用了args参数传递参数给任务函数,并使用max_instances参数设置最多并发3个任务。6. 阻塞和非阻塞APScheduler提供了阻塞和非阻塞两种调度器类型。 阻塞调度器: 在调度器启动后,会阻塞主线程直到所有任务完成。from apscheduler.schedulers.blocking import BlockingSchedulerimport time# 创建阻塞调度器scheduler = BlockingScheduler()# 定义任务函数def job(): print("定时任务执行:", time.strftime("%Y-%m-%d %H:%M:%S")) # 添加定时任务,每隔5秒执行一次scheduler.add_job(job, 'interval', seconds=5)# 启动调度器scheduler.start()print("主线程结束")非阻塞调度器: 在调度器启动后,不会阻塞主线程。from apscheduler.schedulers.background import BackgroundSchedulerimport time# 创建后台调度器scheduler = BackgroundScheduler()# 定义任务函数def job(): print("定时任务执行:", time.strftime("%Y-%m-%d %H:%M:%S")) # 添加定时任务,每隔5秒执行一次scheduler.add_job(job, 'interval', seconds=5)# 启动调度器scheduler.start()# 主线程等待一段时间后结束time.sleep(20)# 关闭调度器scheduler.shutdown()print("主线程结束")在上述代码中,我们分别使用BlockingScheduler和BackgroundScheduler创建了阻塞和非阻塞调度器。7. 错误处理在任务执行过程中,可能会出现异常。APScheduler提供了异常处理机制,我们可以通过try...except...捕获任务函数中的异常,并进行相应的处理。from apscheduler.schedulers.background import BackgroundSchedulerimport time# 创建后台调度器scheduler = BackgroundScheduler()# 定义任务函数def job(): try: print("定时任务执行:", time.strftime("%Y-%m-%d %H:%M:%S")) # 抛出一个异常 raise ValueError("任务出现异常") except Exception as e: print("任务执行过程中发生异常:", str(e)) # 添加定时任务,每隔5秒执行一次scheduler.add_job(job, 'interval', seconds=5)# 启动调度器scheduler.start()# 主线程等待一段时间后结束time.sleep(20)# 关闭调度器scheduler.shutdown()print("主线程结束")在上述代码中,我们在任务函数中抛出了一个ValueError异常,并通过try...except...捕获并输出了异常信息。8. 立即执行任务有时候我们可能需要立即执行一个任务,而不是等到下次触发时间。APScheduler提供了run_job方法来立即执行任务。from apscheduler.schedulers.background import BackgroundSchedulerimport time# 创建后台调度器scheduler = BackgroundScheduler()# 定义任务函数def job(): print("定时任务执行:", time.strftime("%Y-%m-%d %H:%M:%S")) # 添加定时任务,每隔5秒执行一次scheduler.add_job(job, 'interval', seconds=5)# 启动调度器scheduler.start()# 立即执行任务scheduler.run_job(job)# 主线程等待一段时间后结束time.sleep(20)# 关闭调度器scheduler.shutdown()print("主线程结束")在上述代码中,我们使用scheduler.run_job(job)方法立即执行了任务。9. 调度器持久化在实际应用中,我们可能需要将调度器的配置保存到文件中,以便在下次启动时恢复。from apscheduler.schedulers.background import BackgroundSchedulerfrom apscheduler.jobstores.sqlalchemy import SQLAlchemyJobStoreimport time# 创建数据库存储jobstores = { 'default': SQLAlchemyJobStore(url='sqlite:///jobs.sqlite')}# 创建后台调度器,并指定jobstores参数scheduler = BackgroundScheduler(jobstores=jobstores)# 定义任务函数def job(): print("定时任务执行:", time.strftime("%Y-%m-%d %H:%M:%S")) # 添加定时任务,每隔5秒执行一次scheduler.add_job(job, 'interval', seconds=5)# 启动调度器scheduler.start()# 主线程等待一段时间后结束time.sleep(20)# 关闭调度器scheduler.shutdown()print("主线程结束")在上述代码中,我们创建了一个数据库存储jobstores,并在创建后台调度器时指定了jobstores参数。这样,在调度器运行过程中,任务的配置将会被持久化到数据库中。10. 任务监听器APScheduler提供了任务监听器,用于监听任务的状态变化。我们可以通过add_listener方法添加监听器,并在任务状态发生变化时进行相应的处理。from apscheduler.schedulers.background import BackgroundSchedulerimport time# 创建后台调度器scheduler = BackgroundScheduler()# 定义任务函数def job(): print("定时任务执行:", time.strftime("%Y-%m-%d %H:%M:%S")) # 添加定时任务,每隔5秒执行一次scheduler.add_job(job, 'interval', seconds=5)# 定义任务监听器def my_listener(event): if event.exception: print("任务执行过程中发生异常:", str(event.exception)) else: print("任务执行成功") # 添加任务监听器scheduler.add_listener(my_listener, mask='all')# 启动调度器scheduler.start()# 主线程等待一段时间后结束time.sleep(20)# 关闭调度器scheduler.shutdown()print("主线程结束")在上述代码中,我们创建了一个任务监听器my_listener,并在任务执行过程中通过if...else...判断是否出现异常。然后通过scheduler.add_listener(my_listener, mask='all')方法添加了监听器。11. 移除定时任务如果我们希望在调度器运行过程中移除某个定时任务,可以使用scheduler.remove_job(job_id)方法。from apscheduler.schedulers.background import BackgroundSchedulerimport time# 创建后台调度器scheduler = BackgroundScheduler()# 定义任务函数def job(): print("定时任务执行:", time.strftime("%Y-%m-%d %H:%M:%S")) # 添加定时任务,每隔5秒执行一次,并获取任务IDjob_id = scheduler.add_job(job, 'interval', seconds=5).id# 启动调度器scheduler.start()# 主线程等待一段时间后移除定时任务time.sleep(10)scheduler.remove_job(job_id)# 主线程等待一段时间后结束time.sleep(10)# 关闭调度器scheduler.shutdown()print("主线程结束")在上述代码中,我们通过scheduler.add_job(job, 'interval', seconds=5).id获取了定时任务的ID,并使用scheduler.remove_job(job_id)移除了定时任务。总结通过本文的介绍,我们学习了APScheduler库的基本用法,包括创建定时任务、定时任务触发器、任务存储、并发执行、阻塞和非阻塞调度器、错误处理、立即执行任务、调度器持久化、任务监听器和移除定时任务等。APScheduler为Python开发者提供了一个强大的定时任务调度框架,使得在Python中实现定时任务变得非常简单和高效。掌握APScheduler的使用将为我们的项目和程序带来很大的便利。原文链接:https://www.51cto.com/article/768032.html
-
AI绘画大赛参赛作品《夕阳西下》
-
1 项目背景 2019年底,肺炎(COVID-19)在全球爆发,后来被确认为新型冠状病毒(SARS-CoV-2)所引发的。 2 项目目标 我们在爬取到公开数据的条件下,开展了一些可视化工作希望能够帮助大家更好理解现在疫情的发展情况,更有信心一起战胜肆虐的病毒。 3 项目分析 3.1数据获取 3.1.1分析网站 先去先找到今天要爬取的目标数据: https://news.qq.com/zt2020/page/feiyan.htm#/ 3.1.2找到数据所在url url点击跳转查看 url='https://api.inews.qq.com/newsqa/v1/query/inner/publish/modules/list?modules=statisGradeCityDetail,diseaseh5Shelf' 3.1.3获取数据 通过爬虫获取它的json数据: url='https://api.inews.qq.com/newsqa/v1/query/inner/publish/modules/list?modules=statisGradeCityDetail,diseaseh5Shelf' response = requests.get(url, verify=False) json_data = response.json()['data'] china_data = json_data['diseaseh5Shelf']['areaTree'][0]['children'] # 列表 3.1.4解析数据 通过一个for循环对我们的列表进行取值然后再存入到我们的字典中 data_set = [] for i in china_data: data_dict = {} # 地区名称 data_dict['province'] = i['name'] # 新增确认 data_dict['nowConfirm'] = i['total']['nowConfirm'] # 死亡人数 data_dict['dead'] = i['total']['dead'] # 治愈人数 data_dict['heal'] = i['total']['heal'] data_set.append(data_dict) 3.1.5保存数据 df = pd.DataFrame(data_set) df.to_csv('yiqing_data.csv') 3.2数据可视化 3.2.1读取数据 df2 = df.sort_values(by=['nowConfirm'],ascending=False)[:9] df2 3.2.2各地区确诊人数与死亡人数情况条形图 bar = ( Bar() .add_xaxis(list(df['province'].values)[:6]) .add_yaxis("死亡", df['dead'].values.tolist()[:6]) .add_yaxis("治愈", df['heal'].values.tolist()[:6]) .set_global_opts( title_opts=opts.TitleOpts(title="各地区确诊人数与死亡人数情况"), datazoom_opts=[opts.DataZoomOpts()], ) ) bar.render_notebook() 3.2.3各地区现有确诊人数地图 china_map = ( Map() .add("现有确诊", [list(i) for i in zip(df['province'].values.tolist(),df['nowConfirm'].values.tolist())], "china") .set_global_opts( title_opts=opts.TitleOpts(title="各地区确诊人数"), visualmap_opts=opts.VisualMapOpts(max_=600, is_piecewise=True), ) ) china_map.render_notebook() 3.2.4各地区现有确诊人数分布环形图 pie = ( Pie() .add( "", [list(i) for i in zip(df2['province'].values.tolist(),df2['nowConfirm'].values.tolist())], radius = ["10%","30%"] ) .set_global_opts( legend_opts=opts.LegendOpts(orient="vertical", pos_top="70%", pos_left="70%"), ) .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}")) ) pie.render_notebook() 3.2.4各地区现有确诊人数分布折线图 line = ( Line() .add_xaxis(list(df['province'].values)) .add_yaxis("治愈", df['heal'].values.tolist()) .add_yaxis("死亡", df['dead'].values.tolist()) .set_global_opts( title_opts=opts.TitleOpts(title="死亡与治愈"), ) ) line.render_notebook() 项目源码: import requests # 发送网络请求模块 import json import pprint # 格式化输出模块 import pandas as pd # 数据分析当中一个非常重要的模块 from pyecharts import options as opts from pyecharts.charts import Bar,Line,Pie,Map,Grid import urllib3 from pyecharts.globals import CurrentConfig, NotebookType # 配置对应的环境类型 CurrentConfig.NOTEBOOK_TYPE = NotebookType.JUPYTER_NOTEBOOK CurrentConfig.ONLINE_HOST='https://assets.pyecharts.org/assets/' urllib3.disable_warnings()#解决InsecureRequestWarning: Unverified HTTPS request is being made to host 'api.inews.qq.com'. 问题 url = 'https://api.inews.qq.com/newsqa/v1/query/inner/publish/modules/list?modules=statisGradeCityDetail,diseaseh5Shelf' response = requests.get(url, verify=False) json_data = response.json()['data'] china_data = json_data['diseaseh5Shelf']['areaTree'][0]['children'] # 列表 data_set = [] for i in china_data: data_dict = {} # 地区名称 data_dict['province'] = i['name'] # 新增确认 data_dict['nowConfirm'] = i['total']['nowConfirm'] # 死亡人数 data_dict['dead'] = i['total']['dead'] # 治愈人数 data_dict['heal'] = i['total']['heal'] data_set.append(data_dict) df = pd.DataFrame(data_set) df.to_csv('yiqing_data.csv') df2 = df.sort_values(by=['nowConfirm'],ascending=False)[:9] df2 # bar = ( # Bar() # .add_xaxis(list(df['province'].values)[:6]) # .add_yaxis("死亡", df['dead'].values.tolist()[:6]) # .add_yaxis("治愈", df['heal'].values.tolist()[:6]) # .set_global_opts( # title_opts=opts.TitleOpts(title="各地区确诊人数与死亡人数情况"), # datazoom_opts=[opts.DataZoomOpts()], # ) # ) # bar.render_notebook() # china_map = ( # Map() # .add("现有确诊", [list(i) for i in zip(df['province'].values.tolist(),df['nowConfirm'].values.tolist())], "china") # .set_global_opts( # title_opts=opts.TitleOpts(title="各地区确诊人数"), # visualmap_opts=opts.VisualMapOpts(max_=600, is_piecewise=True), # ) # ) # china_map.render_notebook() # pie = ( # Pie() # .add( # "", # [list(i) for i in zip(df2['province'].values.tolist(),df2['nowConfirm'].values.tolist())], # radius = ["10%","30%"] # ) # .set_global_opts( # legend_opts=opts.LegendOpts(orient="vertical", pos_top="70%", pos_left="70%"), # ) # .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}")) # ) # pie.render_notebook() line = ( Line() .add_xaxis(list(df['province'].values)) .add_yaxis("治愈", df['heal'].values.tolist()) .add_yaxis("死亡", df['dead'].values.tolist()) .set_global_opts( title_opts=opts.TitleOpts(title="死亡与治愈"), ) ) line.render_notebook() ———————————————— 版权声明:本文为CSDN博主「城南望余雪」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/weixin_45987577/article/details/124685869
-
跟着上一期的玫瑰花花样表白之后,小编新出了2款新型升级之后的表白代码! 花样表白总有一款是你喜欢的!效果满分~ 正文 还是熟悉的配方!熟悉的味道! 盛开的蓝玫瑰 效果如下: 附源码: t.setup(800,800) t.hideturtle() t.speed(11) t.penup() t.goto(50,-450) t.pensize(5) t.pencolor("black") t.seth(140) t.pendown() t.speed(10) t.circle(-300,60) t.fd(100) #叶子 t.seth(10) t.fd(50) t.fillcolor("green") t.begin_fill() t.right(40) t.circle(120,80) t.left(100) t.circle(120,80) t.end_fill() t.seth(10) t.fd(90) t.speed(11) t.penup() t.fd(-140) t.seth(80) #一片叶子 t.pendown() t.speed(10) t.fd(70) t.seth(160) t.fd(50) t.fillcolor("green") t.begin_fill() t.right(40) t.circle(120,80) t.left(100) t.circle(120,80) t.end_fill() t.seth(160) t.fd(90) t.speed(11) t.penup() t.fd(-140) t.seth(80) t.pendown() t.speed(10) # t.fd(100) #花瓣 t.seth(-20) t.fillcolor("blue") t.begin_fill() t.circle(100,100) t.circle(-110,70) t.seth(179) t.circle(223,76) t.end_fill() #2花瓣 t.speed(11) t.fillcolor("blue") t.begin_fill() t.left(180) t.circle(-223,60) t.seth(70) t.speed(10) t.circle(-213,15)#55 t.left(70)#125 t.circle(200,70) t.seth(-80) t.circle(-170,40) t.circle(124,94) t.end_fill() # t.speed(11) t.penup() t.right(180) t.circle(-124,94) t.circle(170,40) t.pendown() t.speed(10) t.seth(-60) t.circle(175,70) t.seth(235) t.circle(300,12) t.right(180) t.circle(-300,12) t.seth(125) t.circle(150,60) t.seth(70) t.fd(-20) t.fd(20) t.seth(-45) t.circle(150,40) t.seth(66) t.fd(-18.5) t.fd(18.5) t.seth(140) t.circle(150,27) t.seth(60) t.fd(-8) t.speed(11) t.penup() t.left(20.8) t.fd(-250.5) #3花瓣 t.pendown() t.speed(10) t.fillcolor("blue") t.begin_fill() t.seth(160) t.circle(-140,85) t.circle(100,70) t.right(165) t.circle(-200,32) t.speed(11) t.seth(-105) t.circle(-170,14.5) t.circle(123,94) t.end_fill() t.done() 下面这款是超超超超超~好看好美的满屏开满玫瑰花的源码哦! 效果满分—满屏玫瑰花开。 这是不同时间段的抓拍截图(一) 抓拍截图(二) 抓拍截图(三) 效果满分,后面的会一直开满电脑屏幕哦!这边小编直接打包完成了.exe的文件。 大家需要的直接拿去表白啦~ 总结 好啦!这二款都超好看~最后这款满屏玫瑰效果满分,你可以直接发给需要表白的对象啦 你们的支持是我最大的动力!!记得三连哦~mua 欢迎大家阅读往期的文章~ ———————————————— 版权声明:本文为CSDN博主「顾木子吖」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/weixin_55822277/article/details/120486927
-
“语法解析”和“词法解析”是计算机理解查询语句的重要一环。而词法和语法的解析依赖于一定的文法规则,有诸多网站可以可视化文法规则,但是对于根据文法规则生成的语法树进行可视化的文章却比较少。对文法规则生成的语法树进行可视化,可以降低查询语言的理解成本。本文以华为图引擎使用的cypher查询语言为例,将查询语句的解析结果(语法树)在jupyterLab上可视化。案例中使用的工具不仅可以可视化cypher语言的语法树结构,对其他antlr生成的抽象语法树同样适用。详情参见:cid:link_1AI Gallery案例地址为:cid:link_0
-
ipython:同为python命令行工具,相比于原始的python命令行客户端,ipython无疑具有更好地交互体验,无须额外配置,即可享有代码着色、自动补全等诸多便利。Anaconda:python的环境管理软件。首先可以很方便的切换不同的版本(包括各个版本的python和各个版本的类库),其次,Anaconda的安装和环境变量配置是仅面向用户个人的,这无疑很适合多人共用服务器的场景。但是,系统自带的ipython和安装好的Anaconda居然不兼容?借鉴自 gitthub-ipython 的 issue 讨论,解决方法如下。在Anaconda环境下重新安装ipython:conda install -c anaconda ipython进入Anaconda环境,启动ipython。尝试调用torch,成功。
推荐直播
-
华为AI技术发展与挑战:集成需求分析的实战指南
2024/11/26 周二 18:20-20:20
Alex 华为云学堂技术讲师
本期直播将综合讨论华为AI技术的发展现状,技术挑战,并深入探讨华为AI应用开发过程中的需求分析过程,从理论到实践帮助开发者快速掌握华为AI应用集成需求的框架和方法。
去报名 -
华为云DataArts+DWS助力企业数据治理一站式解决方案及应用实践
2024/11/27 周三 16:30-18:00
Walter.chi 华为云数据治理DTSE技术布道师
想知道数据治理项目中,数据主题域如何合理划分?数据标准及主数据标准如何制定?数仓分层模型如何合理规划?华为云DataArts+DWS助力企业数据治理项目一站式解决方案和应用实践告诉您答案!本期将从数据趋势、数据治理方案、数据治理规划及落地,案例分享四个方面来助力企业数据治理项目合理咨询规划及顺利实施。
去报名
热门标签